New submission from Ram Rachum:

Every single time I see the error message `global name 'X' is not defined` I 
say to myself, "ah yeah, I mistyped a variable name."

But then it occurred to me, why should I have to do this mental translation 
from "global name not defined" to "I mistyped a variable name"?

Now, I'm not asking for the error message to say "You mistyped a variable 
name", because that goes too much into second-guessing the user. But can we at 
least drop the reference to a global name? I understand that Python first 
searches the local namespace, and only then in the global namespace, and if the 
name isn't found there then an error is raised. But that doesn't mean that the 
error message should just assume that the variable is supposed to be global. 
It's misleading to say that a variable is global when it's in fact local.

I think that the error message should just say `Variable 'X' not defined`. 
Maybe add a suggestion `(Typo?)` at the end.


Example:

    >>> def f():
    ...     meow = 0
    ...     return meoow
    ...
    >>> f()
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "<stdin>", line 3, in f
    NameError: global name 'meoow' is not defined

I'd make the error message:

    NameError: Variable 'meoow' is not defined

----------
components: Interpreter Core
messages: 180591
nosy: cool-RR
priority: normal
severity: normal
status: open
title: Misleading error message: global name 'X' is not defined
type: behavior
versions: Python 3.4, Python 3.5

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue17032>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to