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
Insufficient error message with incorrect formated string literal #75323
Comments
Trying to run a script with a bug in a formated string literal (in the example the ":" is missing) throws an "invalid syntax" error at the first expression of the script. Example: import math
a = "a"
b = f"{a>2s}" # forgotten ":", should be f"{a:>2s}" Running this script throws an "invalid syntax" error in the first line "import math". In a large program this behavior makes it nearly impossible to find the real bug in the program as the error message does not give any hint about the line or the type of the error in the program. Using Python 3.6.2, IDLE 3.6.2 on Mac macOS Sierra (10.12.1) |
On 3.6.1 on Windows, I get: % python3 bpo-31140.py Which is far from ideal, but at least points to (a portion of) the correct text. I won't have access to a copy of 3.6.2 or 3.7 until later today. Can you show the exact output from 3.6.2? |
Hi Eric, running the script from the terminal on my system (macOS, Python 3.6.2) gives the same ErrorMessage as you stated. The problem is the output "line 1". Running the script from IDLE (3.6.2), the error points to the first line. And in IDLE you do not get the useful hint "(a>2s)" but just "SyntaxError: invalid syntax". |
Thanks. There was some work on this recently: I'll try and check 3.7 later today. |
I can confirm that the problem still exists in Python 3.6.4 and 3.7.0a4. Here is another way to demonstrate it: Create the following file test.py: # test
hello = f"{world)}" Note that there is a syntax error in the f-string in line 2 which has a closing parentheses, but no opening one. Import this from Python 3.6.4 or 3.7.0a4: >>> import test
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<fstring>", line 1
(world))
^
SyntaxError: unexpected EOF while parsing The problem here is that the error message does not contain the name of the erroneous file (test.py), points to a wrong line (line 1 instead of line 2), and also shows parentheses instead of braces around the word "world", which are not there in the original code. This can make it hard to locate such errors. Note that when there are other kinds of errors in the f-string, or other kinds of "unexpected EOF" in the imported file, the errorenous file is usually reported correctly in the error message. Only certain kinds of syntax errors in f-strings seem to be problematic. |
Status as of 3.9.0a1: ====== $ ./python test.py
File "/home/bob/pybug/Python-3.9.0a1/test.py", line 2
hello = f"{world)}"
^
SyntaxError: f-string: unmatched ')' ====== $ ./python bpo-31140.py
File "<fstring>", line 1
(a>2s)
^
SyntaxError: invalid syntax ======= $ cat fruit.py
pass
pass
s = f"{My favourite fruit is {apple}}"
$ ./python -V
Python 3.9.0a1
$ ./python fruit.py
File "<fstring>", line 1
(My favourite fruit is {apple})
^
SyntaxError: invalid syntax |
I'm not getting the problem on 3.9.7 on Windows. The wrong line number is a problem for IDLE's syntax highlighter, that marks the first line as a Syntax Error, even if that line is a comment. This is an issue for ArcGIS Pro users, which is (I think) currently shipping with Python 3.7.11, so those users may come across it. Best solution would be for Esri to update their Python version to something newer. |
Yes, they should update Python. A lot of work went in to fixing these issues, and won't be backported. |
Thanks Eric. |
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:
bugs.python.org fields:
The text was updated successfully, but these errors were encountered: