summaryrefslogtreecommitdiffstats
path: root/Include
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1999-06-22 14:47:32 (GMT)
committerGuido van Rossum <guido@python.org>1999-06-22 14:47:32 (GMT)
commit87460821755ba72294b0c95b7d130b922d2a7ea4 (patch)
tree0f0a205db4141203afe732f9aeafaeeddaf36386 /Include
parent43128905befc05001219d79715448191a04b8ab9 (diff)
downloadcpython-87460821755ba72294b0c95b7d130b922d2a7ea4.zip
cpython-87460821755ba72294b0c95b7d130b922d2a7ea4.tar.gz
cpython-87460821755ba72294b0c95b7d130b922d2a7ea4.tar.bz2
Patch by Tim Peters:
Introduce a new builtin exception, UnboundLocalError, raised when ceval.c tries to retrieve or delete a local name that isn't bound to a value. Currently raises NameError, which makes this behavior a FAQ since the same error is raised for "missing" global names too: when the user has a global of the same name as the unbound local, NameError makes no sense to them. Even in the absence of shadowing, knowing whether a bogus name is local or global is a real aid to quick understanding. Example: D:\src\PCbuild>type local.py x = 42 def f(): print x x = 13 return x f() D:\src\PCbuild>python local.py Traceback (innermost last): File "local.py", line 8, in ? f() File "local.py", line 4, in f print x UnboundLocalError: x D:\src\PCbuild> Note that UnboundLocalError is a subclass of NameError, for compatibility with existing class-exception code that may be trying to catch this as a NameError. Unfortunately, I see no way to make this wholly compatible with -X (see comments in bltinmodule.c): under -X, [UnboundLocalError is an alias for NameError --GvR]. [The ceval.c patch differs slightly from the second version that Tim submitted; I decided not to raise UnboundLocalError for DELETE_NAME, only for DELETE_LOCAL. DELETE_NAME is only generated at the module level, and since at that level a NameError is raised for referencing an undefined name, it should also be raised for deleting one.]
Diffstat (limited to 'Include')
-rw-r--r--Include/pyerrors.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/Include/pyerrors.h b/Include/pyerrors.h
index 8a8111a..becaabd 100644
--- a/Include/pyerrors.h
+++ b/Include/pyerrors.h
@@ -78,6 +78,7 @@ extern DL_IMPORT(PyObject *) PyExc_SyntaxError;
extern DL_IMPORT(PyObject *) PyExc_SystemError;
extern DL_IMPORT(PyObject *) PyExc_SystemExit;
extern DL_IMPORT(PyObject *) PyExc_TypeError;
+extern DL_IMPORT(PyObject *) PyExc_UnboundLocalError;
extern DL_IMPORT(PyObject *) PyExc_ValueError;
extern DL_IMPORT(PyObject *) PyExc_ZeroDivisionError;