On Thu, Aug 6, 2020 at 3:40 AM Christopher Barker <[email protected]>
wrote:
> I'm all for clear and helpful error messages, but this feels a tad too
> verbose (and even a bit patronizing) to me. But the highlighting of
> character look-alikes is very helpful.
>
> Perhaps something like:
>
> """
> SyntaxError: invalid character in identifier
> -->2: print(“Squares:”)
> ^
> An identifier contains one or more unallowed Unicode characters.
> It is likely the "curly quote" unicode quotation mark, rather than
> the required ASCII single or double quote was used for a string.
> """
>
> I'm assuming that this would detect some of the common "look alikes" and
> give a specific suggestion as above.
>
> Keep in mind that anyone coding Python is going to see a LOT of
> SyntaxErrors -- we don't need to present a message as though they've never
> seen such an error before. But it IS helpful to point out errors that are
> hard to see with a glance at the code.
>
You raise some very good points. Here's a different output from the same
program, followed by some explanation for context.
= = =
$ python -im friendly_traceback --verbosity 8 raise_syntax_error75
SyntaxError: invalid character in identifier
1: """Should raise SyntaxError: invalid character in identifier for
Python <=3.8
2: and SyntaxError: invalid character '«' (U+00AB) in Python
3.9"""
-->3: a = « hello »
^
Python indicates that you used some unicode characters not allowed
as part of a variable name; this includes many emojis.
However, I suspect that you used a fancy unicode quotation mark
instead of a normal single or double quote for a string.
This can happen if you copy-pasted code.
= = =
Comments:
1. Friendly-traceback is primarily intended for beginners who do not know
what a SyntaxError or a NameError means. This is why it normally includes,
by default, [quote] a message as though they've never seen such an error
before [/quote]. They also might not know what "an identifier" means, but
likely have seen "variable name".
2. Friendly-traceback is designed to support translation. Currently, all
the explanations provided are available in French and English, and someone
is working on a Chinese translation. Thus there might be a bit of
duplication between the message provided by Python ("invalid character in
identifier") always shown "as is", and the longer explanation given by
friendly-traceback.
3. It allows one to select a "verbosity level". Up until a few minutes
ago, the available verbosity levels were 0 to 9 - but did not include a
level 8 (for historical reasons), each level providing a subset of all
possible information. (The default level leaves out the normal Python
traceback). Thanks to your comment, I finally filled a slot for level 8,
which is what you see above. (This addition will be part of the next
release on pypi). Note that the location of the ^ might be messed up in
this email.
4. The original discussion mentioned that using the wrong types of quotes
most often occurred when beginners copy-pasted some code from an ebook or a
website. This is why the message mentions it ... but I've modified it so
that it is, hopefully, less patronizing.
Thanks again for your comments. Hopefully, the changes I have made are an
acceptable compromise between what you suggested and what might be useful
for a complete beginner.
André Roberge
>
> -CHB
>
> --
> Christopher Barker, PhD
>
> Python Language Consulting
> - Teaching
> - Scientific Software Development
> - Desktop GUI and Web Development
> - wxPython, numpy, scipy, Cython
>
_______________________________________________
Python-ideas mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at
https://mail.python.org/archives/list/[email protected]/message/IQ45ZS53S6ZUXA756ULZIJ45M4PO6LH4/
Code of Conduct: http://python.org/psf/codeofconduct/