diff options
author | Georg Brandl <georg@python.org> | 2008-08-28 07:57:16 (GMT) |
---|---|---|
committer | Georg Brandl <georg@python.org> | 2008-08-28 07:57:16 (GMT) |
commit | 2cabc5629649b2323092d1678d2e1233d2240f00 (patch) | |
tree | e2b2fd127edbdba82473cc520faa8f1b4eb67432 /Python | |
parent | 9edd2bd35cfc5f33b53c5def02cac23e7bb6e84b (diff) | |
download | cpython-2cabc5629649b2323092d1678d2e1233d2240f00.zip cpython-2cabc5629649b2323092d1678d2e1233d2240f00.tar.gz cpython-2cabc5629649b2323092d1678d2e1233d2240f00.tar.bz2 |
#3706: fix error message for wrong exec() argument type. R=Guido.
Diffstat (limited to 'Python')
-rw-r--r-- | Python/bltinmodule.c | 22 |
1 files changed, 9 insertions, 13 deletions
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index ae7ceec..7c08765 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -495,7 +495,7 @@ Return negative if x<y, zero if x==y, positive if x>y."); static char * -source_as_string(PyObject *cmd) +source_as_string(PyObject *cmd, char *funcname, char *what) { char *str; Py_ssize_t size; @@ -506,8 +506,9 @@ source_as_string(PyObject *cmd) return NULL; } else if (!PyObject_CheckReadBuffer(cmd)) { - PyErr_SetString(PyExc_TypeError, - "eval()/exec() arg 1 must be a string, bytes or code object"); + PyErr_Format(PyExc_TypeError, + "%s() arg 1 must be a %s object", + funcname, what); return NULL; } if (PyObject_AsReadBuffer(cmd, (const void **)&str, &size) < 0) { @@ -591,7 +592,7 @@ builtin_compile(PyObject *self, PyObject *args, PyObject *kwds) return result; } - str = source_as_string(cmd); + str = source_as_string(cmd, "compile", "string, bytes, AST or code"); if (str == NULL) return NULL; @@ -703,7 +704,7 @@ builtin_eval(PyObject *self, PyObject *args) return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals); } - str = source_as_string(cmd); + str = source_as_string(cmd, "eval", "string, bytes or code"); if (str == NULL) return NULL; @@ -751,13 +752,7 @@ builtin_exec(PyObject *self, PyObject *args) } else if (locals == Py_None) locals = globals; - if (!PyUnicode_Check(prog) && - !PyCode_Check(prog)) { - PyErr_Format(PyExc_TypeError, - "exec() arg 1 must be a string, file, or code " - "object, not %.100s", prog->ob_type->tp_name); - return NULL; - } + if (!PyDict_Check(globals)) { PyErr_Format(PyExc_TypeError, "exec() arg 2 must be a dict, not %.100s", globals->ob_type->tp_name); @@ -785,7 +780,8 @@ builtin_exec(PyObject *self, PyObject *args) v = PyEval_EvalCode((PyCodeObject *) prog, globals, locals); } else { - char *str = source_as_string(prog); + char *str = source_as_string(prog, "exec", + "string, bytes or code"); PyCompilerFlags cf; if (str == NULL) return NULL; |