On 26/06/17 18:30, Chris Angelico wrote:
On Tue, Jun 27, 2017 at 2:41 AM, Rurpy via Python-list
<python-list@python.org> wrote:
How about:

   In Python 2, 'print' was a statement and did not require
   parenthesis around its argument.  In Python 3 'print' has
   been changed to a function and now, like all functions,
   requires parenthesis around its arguments:
     python 2:  print arg1, arg2,...
     python 3:  print (arg1, arg2,...)

Absolutely, if we consider that Python 2 is the official standard and
Python 3 is a buggy interloper. But if Python 3 is the standard and
Python 2 is the legacy version, then the existing message is far more
appropriate, without being unhelpful.

To be fair, this already seems to be a special case:

-----------------------------------------------------------
$ python3
Python 3.5.2 (default, Nov 17 2016, 17:05:23)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> def foo(s): return s
...
>>> type(foo)
<class 'function'>
>>> type(enumerate)
<class 'type'>
>>> type(len)
<class 'builtin_function_or_method'>
>>> type(print)
<class 'builtin_function_or_method'>
>>> foo "bar"
  File "<stdin>", line 1
    foo "bar"
            ^
SyntaxError: invalid syntax
>>> enumerate "bar"
  File "<stdin>", line 1
    enumerate "bar"
                  ^
SyntaxError: invalid syntax
>>> len "bar"
  File "<stdin>", line 1
    len "bar"
            ^
SyntaxError: invalid syntax
>>> print "bar"
  File "<stdin>", line 1
    print "bar"
              ^
SyntaxError: Missing parentheses in call to 'print'
>>> p = print
>>> p "foo"
  File "<stdin>", line 1
    p "foo"
          ^
SyntaxError: invalid syntax
>>>
-----------------------------------------------------------

If that's the case, then why make it so terse? It's presumably there as a special case specifically to tell/remind people that print became a function in Py3.

I think the suggestion above is a bit wordy, but even if it was something like "Missing parentheses in call to the 'print' function" or even "Missing parentheses in call to 'print'. Using 'print' as a statement is obsolete syntax in Python 3." ... or whatever is considered more descriptive.

Either that or just make it "SyntaxError: invalid syntax" like all the others. It seems to fall somewhere between the two at the moment - it's trying to be more helpful but just falls short for a beginner (if one already knows the difference and has just forgotten to call it correctly, it's a nice *reminder*, so I'd actually prefer it not to just become the basic "invalid syntax" message).

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

Reply via email to