The Wayback Machine - https://web.archive.org/web/20240112012042/https://github.com/python/cpython/issues/67224
Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

python -c: Line causing exception not shown for exceptions other than SyntaxErrors #67224

Closed
Arfrever mannequin opened this issue Dec 12, 2014 · 8 comments
Closed

python -c: Line causing exception not shown for exceptions other than SyntaxErrors #67224

Arfrever mannequin opened this issue Dec 12, 2014 · 8 comments
Labels
3.11 bug and security fixes interpreter-core (Objects, Python, Grammar, and Parser dirs) type-feature A feature request or enhancement

Comments

@Arfrever
Copy link
Mannequin

Arfrever mannequin commented Dec 12, 2014

BPO 23035
Nosy @terryjreedy, @pitrou, @vstinner, @benjaminp, @serhiy-storchaka

Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.

Show more details

GitHub fields:

assignee = None
closed_at = None
created_at = <Date 2014-12-12.01:44:07.380>
labels = ['interpreter-core', 'type-feature', '3.11']
title = 'python -c: Line causing exception not shown for exceptions other than SyntaxErrors'
updated_at = <Date 2021-06-15.16:58:00.697>
user = 'https://bugs.python.org/Arfrever'

bugs.python.org fields:

activity = <Date 2021-06-15.16:58:00.697>
actor = 'iritkatriel'
assignee = 'none'
closed = False
closed_date = None
closer = None
components = ['Interpreter Core']
creation = <Date 2014-12-12.01:44:07.380>
creator = 'Arfrever'
dependencies = []
files = []
hgrepos = []
issue_num = 23035
keywords = []
message_count = 7.0
messages = ['232506', '232537', '232578', '232582', '232583', '232584', '232585']
nosy_count = 6.0
nosy_names = ['terry.reedy', 'pitrou', 'vstinner', 'benjamin.peterson', 'Arfrever', 'serhiy.storchaka']
pr_nums = []
priority = 'normal'
resolution = None
stage = None
status = 'open'
superseder = None
type = 'enhancement'
url = 'https://bugs.python.org/issue23035'
versions = ['Python 3.11']

Linked PRs

@Arfrever
Copy link
Mannequin Author

Arfrever mannequin commented Dec 12, 2014

When 'python -c ${command}' is used and exception other than SyntaxError occurs, then line causing exception is not shown.

Problem seen in output of last 2 commands below:

$ cat /tmp/test1
1 /
$ cat /tmp/test2
1 / 0
$ cat /tmp/test3
a
$ python3.5 /tmp/test1
  File "/tmp/test1", line 1
    1 /
      ^
SyntaxError: invalid syntax
$ python3.5 /tmp/test2
Traceback (most recent call last):
  File "/tmp/test2", line 1, in <module>
    1 / 0
ZeroDivisionError: division by zero
$ python3.5 /tmp/test3
Traceback (most recent call last):
  File "/tmp/test3", line 1, in <module>
    a
NameError: name 'a' is not defined
$ python3.5 -c '1 /'
  File "<string>", line 1
    1 /
      ^
SyntaxError: invalid syntax
$ python3.5 -c '1 / 0'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ZeroDivisionError: division by zero
$ python3.5 -c 'a'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
NameError: name 'a' is not defined

@Arfrever Arfrever mannequin added the interpreter-core (Objects, Python, Grammar, and Parser dirs) label Dec 12, 2014
@vstinner vstinner changed the title -c: Line causing exception not shown for exceptions other than SyntaxErrors python -c: Line causing exception not shown for exceptions other than SyntaxErrors Dec 12, 2014
@vstinner
Copy link
Member

SyntaxError exceptions have a text attribute which contains the line where the error occurred. It's really a special case. For other exceptions, Python only knows that the error occurred in the file called "<string>".

Being able to display the line for any exception requires a complex development. I'm not interested to implement it, I don't think that it's very useful (compared to the time needed to develop it).

@Arfrever
Copy link
Mannequin Author

Arfrever mannequin commented Dec 12, 2014

It should not be more complex to read a line from a command line argument than to read a line from a regular file.

@terryjreedy
Copy link
Member

Code entered with -c seems to be treated the same as code entered at the >>> prompt of the interactive interpreter.

>>> 1/0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero

In both cases, the offending code is right there to be seen, so I can understand reluctance to echo it. For SyntaxErrors (and only them) echoing the code is needed to have something to point to.

Idle's Shell does what you want.
>>> 1/0
Traceback (most recent call last):
  File "<pyshell#12>", line 1, in <module>
    1/0
ZeroDivisionError: division by zero

Shell can do this because it has easy, platform-independent access to the tkinter Text widget storing and displaying previously entered code. I presume accessing a system-dependent console history buffer is much harder.

Where the difference really matters is when the error is in previously defined objects.

>>> def f():
...   return a

>>> f()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in f
NameError: name 'a' is not defined

versus (Shell)

>>> def f():
	return a

>>> f()
Traceback (most recent call last):
  File "<pyshell#16>", line 1, in <module>
    f()
  File "<pyshell#15>", line 2, in f
    return a
NameError: name 'a' is not defined

@Arfrever
Copy link
Mannequin Author

Arfrever mannequin commented Dec 13, 2014

Argument of -c option can have multiple lines, while only 1 line can be directly entered in interactive interpreter.

python -c $'line1\nline2\nline3\nline4\n...'

@terryjreedy
Copy link
Member

One can paste multiple lines, comprising multiple statements, into the console interprer. (Shell only recognizes a single pasted statement.)
I agree, however, that it seems that Python could keep the split version of the input line for the purpose of tracebacks. I just tried

C:\Users\Terry>python -c "import sys; print(sys.argv)"
['-c']

I expected to see to see a list of 3 strings, not 1.

@Arfrever
Copy link
Mannequin Author

Arfrever mannequin commented Dec 13, 2014

Arguments after argument of -c option are included in sys.argv:

$ python -c "import sys; print(sys.argv)" a b
['-c', 'a', 'b']

@iritkatriel iritkatriel added 3.11 bug and security fixes type-feature A feature request or enhancement labels Jun 15, 2021
@ezio-melotti ezio-melotti transferred this issue from another repository Apr 10, 2022
@iritkatriel
Copy link
Member

CC @pablogsal

pablogsal added a commit to pablogsal/cpython that referenced this issue Oct 23, 2023
pablogsal added a commit to pablogsal/cpython that referenced this issue Oct 23, 2023
pablogsal added a commit to pablogsal/cpython that referenced this issue Oct 23, 2023
pablogsal added a commit to pablogsal/cpython that referenced this issue Oct 24, 2023
pablogsal added a commit to pablogsal/cpython that referenced this issue Oct 24, 2023
pablogsal added a commit to pablogsal/cpython that referenced this issue Oct 25, 2023
…when using the -c option when running Python
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
3.11 bug and security fixes interpreter-core (Objects, Python, Grammar, and Parser dirs) type-feature A feature request or enhancement
Projects
None yet
Development

No branches or pull requests

4 participants