You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Improve error reporting for invalid character in source code #84773
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=Noneclosed_at=<Date2020-05-12.09:42:56.822>created_at=<Date2020-05-11.10:49:33.628>labels= ['interpreter-core', 'type-feature', '3.9']
title='Improve error reporting for invalid character in source code'updated_at=<Date2020-05-12.09:42:56.822>user='https://github.com/serhiy-storchaka'
Currently you get SyntaxError with message "invalid character in identifier" in two cases:
The source code contains some non-ASCII non-identifier character. Usually it happens when you copy code from internet page or PDF file which was "improved" by some enhachaizer which replaces spaces with non-breacking spaces, ASCII minus with a dash or Unicode minus, ASCII quotes with fancy Unicode quotes. They do not look like a part of identifier at all. The error message also does not say what character is invalid, and it is hard to find the culprit because they look too similar to correct characters (especially with some monospace fonts).
Other case is very special -- when the source code contains the declaration for the utf-8 encoding followed by non-UTF-8 bytes sequences. It is rarely happen in real world.
The proposed PR improves errors for these cases.
>>> print(123—45)
File "<stdin>", line 1
print(123—45)
^
SyntaxError: invalid character '—' (U+2014)
The error message no longer contains misleading "in identifier".
The error message contains the invalid character, literal and its hexcode.
The caret points on the invalid character. Previously it pointed on the last non-ascii or non-alphabetical character followed the invalid character (5 in the above example).
For the special case of non-decodable UTF-8 sequence the syntax error message is more informative: "(unicode error) 'utf-8' codec can't decode byte 0xff ...". Although this case needs further improvements.
New changeset 74ea6b5 by Serhiy Storchaka in branch 'master': bpo-40593: Improve syntax errors for invalid characters in source code. (GH-20033) 74ea6b5
Activity
serhiy-storchaka commentedon May 11, 2020
Currently you get SyntaxError with message "invalid character in identifier" in two cases:
See https://mail.python.org/archives/list/python-ideas@python.org/thread/ILMNJ46EAL4ENYK7LLDLGIMYQKZAMMWU/ for discussion.
The proposed PR improves errors for these cases.
The error message no longer contains misleading "in identifier".
The error message contains the invalid character, literal and its hexcode.
The caret points on the invalid character. Previously it pointed on the last non-ascii or non-alphabetical character followed the invalid character (5 in the above example).
For the special case of non-decodable UTF-8 sequence the syntax error message is more informative: "(unicode error) 'utf-8' codec can't decode byte 0xff ...". Although this case needs further improvements.
serhiy-storchaka commentedon May 12, 2020
New changeset 74ea6b5 by Serhiy Storchaka in branch 'master':
bpo-40593: Improve syntax errors for invalid characters in source code. (GH-20033)
74ea6b5