summaryrefslogtreecommitdiff
path: root/Python
diff options
context:
space:
mode:
authorJeremy Hylton <jeremy@alum.mit.edu>2001-04-13 16:51:46 +0000
committerJeremy Hylton <jeremy@alum.mit.edu>2001-04-13 16:51:46 +0000
commitc76770c68c40021322c221dd6bcd62bf98356a33 (patch)
tree4aff013ffa1bac9bb368701fb77a80e08f53b8f3 /Python
parent62effc112793e7176acf9a9e7a852b104e2e1606 (diff)
downloadcpython-git-c76770c68c40021322c221dd6bcd62bf98356a33.tar.gz
Change error message raised when free variable is not yet bound. It
now raises NameError instead of UnboundLocalError, because the var in question is definitely not local. (This affects test_scope.py) Also update the recent fix by Ping using get_func_name(). Replace tests of get_func_name() return value with call to get_func_desc() to match all the other uses.
Diffstat (limited to 'Python')
-rw-r--r--Python/ceval.c26
1 files changed, 16 insertions, 10 deletions
diff --git a/Python/ceval.c b/Python/ceval.c
index a1b3bc2865..b6686b6e1b 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -83,6 +83,9 @@ static void format_exc_check_arg(PyObject *, char *, PyObject *);
"global name '%.200s' is not defined"
#define UNBOUNDLOCAL_ERROR_MSG \
"local variable '%.200s' referenced before assignment"
+#define UNBOUNDFREE_ERROR_MSG \
+ "free variable '%.200s' referenced before assignment" \
+ " in enclosing scope"
/* Dynamic execution profile */
#ifdef DYNAMIC_EXECUTION_PROFILE
@@ -1693,18 +1696,22 @@ eval_code2(PyCodeObject *co, PyObject *globals, PyObject *locals,
x = freevars[oparg];
w = PyCell_Get(x);
if (w == NULL) {
- if (oparg < f->f_ncells)
+ if (oparg < f->f_ncells) {
v = PyTuple_GetItem(co->co_cellvars,
oparg);
- else
+ format_exc_check_arg(
+ PyExc_UnboundLocalError,
+ UNBOUNDLOCAL_ERROR_MSG,
+ v);
+ } else {
v = PyTuple_GetItem(
co->co_freevars,
oparg - f->f_ncells);
-
- format_exc_check_arg(
- PyExc_UnboundLocalError,
- UNBOUNDLOCAL_ERROR_MSG,
- v);
+ format_exc_check_arg(
+ PyExc_NameError,
+ UNBOUNDFREE_ERROR_MSG,
+ v);
+ }
err = -1;
break;
}
@@ -2883,11 +2890,10 @@ call_method(PyObject *func, PyObject *arg, PyObject *kw)
return NULL;
}
if (!ok) {
- char* fn = get_func_name(func);
PyErr_Format(PyExc_TypeError,
- "unbound method %s%smust be "
+ "unbound method %s%s must be "
"called with instance as first argument",
- fn ? fn : "", fn ? "() " : "");
+ get_func_name(func), get_func_desc(func));
return NULL;
}
Py_INCREF(arg);