On 27/06/17 15:05, Steve D'Aprano wrote:
On Tue, 27 Jun 2017 08:34 am, Erik wrote about the print function error message:
To be fair, this already seems to be a special case:
[...]
  >>> len "bar"
    File "<stdin>", line 1
      len "bar"
              ^
SyntaxError: invalid syntax

Correct, the print function is singled out as a special case, because people are
unlikely to come across tutorials telling them to write

    len "bar"

Sure. My point was that it's obviously a special case and not a generic error message that would occur in the same situation with any other callables. Hence there is obviously a single, specific place in the parser code that could just be changed slightly if it would help. I haven't looked at the source code for this.

Indeed. But it is hardly terse: it's a full sentence:

Missing parentheses in call to 'print'

Right, but as in this case, it's likely to trip up a beginner who happens to be following a Py2 tutorial or copying Py2 examples from SO or somewhere. In fact, apart from those of us who switch between versions for different projects and just forget (old habits die hard), a beginner typing in a Py2 example is probably the only case where this error is seen.

So I don't understand the resistance to making the error be a bit more explicit about why it is being generated to help those users - it doesn't explain (the obvious reason) _why_ their tutorial/example gives them an error when it doesn't to the person who wrote the tutorial.


Note that I am *explicitly* making Py3 the "good guy" and Py2 the "bad guy" in all the wordings that I have given that mention a version number - it could even be something like "Missing parentheses in call to 'print'. This is obsolete Python 2 syntax. Please use modern Python 3 syntax.". This addresses ChrisA's issue with the proposed wordy error that he thought Py3 was playing second fiddle in that version.




One other possibility is that a beginner fires up Py3 and gets that "weird" (to them) error when they tried their tutorial or SO code and then finds out that if they fire up Py2 instead it just works. Now they might continue to use Py2 because it's "the one that works" for them.

I would suggest that making the error dissuade them from doing that (for the cost of a few tens of bytes) is a good thing.

I think the suggestion above is a bit wordy, but even if it was
something like "Missing parentheses in call to the 'print' function"

I think this is a good example of "the curse of knowledge". Its hard for expert 
> to think like a non-expert.

[snip]

But to the beginner, adding "function" at the error might as well be

Missing parentheses in call to the 'print' wharrgarbl.

You are concentrating on the detail of what I wrote. I don't care what the eventual wording is (and for sure, someone else is far more qualified than me to suggest wording that is better for a beginner). My point is simply that the error _could_ contain _some_ more information that addresses this issue for a beginner who may be typing in Py2 examples that encourages them to seek out Py3 tutorials instead.

That's why I asked Ben if there was something we
could do to make the sentence clearer.

Exactly. Ben is an example of someone more qualified than me to suggest the correct words.

Either that or just make it "SyntaxError: invalid syntax" like all the
others.

We've been there: adding the specific print message is new to Python 3.5 (or
maybe 3.4, I forget which). Python 3.3 gives just "SyntaxError: invalid
syntax".

That surprises me, to be honest. I had presumed that the parser had just had the machinery for that message placed where the 'print' keyword used to be handled rather than ripping the whole thing out when it became a function. Interesting that it's a retrospective special case.

E.
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to