This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2012年04月08日 19:01 by ezyang, last changed 2022年04月11日 14:57 by admin. This issue is now closed.
| Messages (4) | |||
|---|---|---|---|
| msg157805 - (view) | Author: Edward Yang (ezyang) * | Date: 2012年04月08日 19:01 | |
When generating a backtrace from an interactive Python session (e.g. the input is from <stdin>, Python attempts to actually find a file named <stdin>, to somewhat hilarious consequences.
See the strace'd Python session below:
>>> foo
open("/etc/default/apport", O_RDONLY|O_LARGEFILE) = 3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
open("<stdin>", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("<stdin>", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/usr/local/lib/python2.7/dist-packages/pylint-0.24.0-py2.7.egg/<stdin>", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/usr/local/lib/python2.7/dist-packages/logilab_astng-0.22.0-py2.7.egg/<stdin>", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/usr/local/lib/python2.7/dist-packages/logilab_common-0.56.1-py2.7.egg/<stdin>", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/usr/local/lib/python2.7/dist-packages/unittest2-0.5.1-py2.7.egg/<stdin>", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/usr/local/lib/python2.7/dist-packages/GitPython-0.3.2.RC1-py2.7.egg/<stdin>", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/usr/local/lib/python2.7/dist-packages/gitdb-0.5.4-py2.7-linux-i686.egg/<stdin>", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/usr/local/lib/python2.7/dist-packages/smmap-0.8.1-py2.7.egg/<stdin>", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/usr/local/lib/python2.7/dist-packages/async-0.6.1-py2.7-linux-i686.egg/<stdin>", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/usr/local/lib/python2.7/dist-packages/decorator-3.3.1-py2.7.egg/<stdin>", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.7.2-py2.7-linux-i686.egg/<stdin>", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/usr/local/lib/python2.7/dist-packages/Sphinx-1.0.7-py2.7.egg/<stdin>", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/usr/local/lib/python2.7/dist-packages/docutils-0.8.1-py2.7.egg/<stdin>", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/usr/local/lib/python2.7/dist-packages/Jinja2-2.6-py2.7.egg/<stdin>", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/usr/local/lib/python2.7/dist-packages/Pygments-1.4-py2.7.egg/<stdin>", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/usr/local/lib/python2.7/dist-packages/nose-1.1.2-py2.7.egg/<stdin>", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/home/ezyang/Dev/6.02/<stdin>", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/home/ezyang/Dev/pyafs/<stdin>", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/home/ezyang/Dev/wizard/<stdin>", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/home/ezyang/Dev/twisted/<stdin>", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/usr/local/lib/python2.6/site-packages/<stdin>", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/home/ezyang/Work/shared-python/build/lib.linux-i686-2.6/<stdin>", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/home/ezyang/Work/snarfs/python/coil/<stdin>", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/home/ezyang/Dev/py-github/src/<stdin>", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/usr/lib/python2.7/<stdin>", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/usr/lib/python2.7/plat-linux2/<stdin>", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/usr/lib/python2.7/lib-tk/<stdin>", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/usr/lib/python2.7/lib-old/<stdin>", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/usr/lib/python2.7/lib-dynload/<stdin>", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/usr/local/lib/python2.7/dist-packages/<stdin>", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/usr/lib/python2.7/dist-packages/<stdin>", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/usr/lib/python2.7/dist-packages/Numeric/<stdin>", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/usr/lib/python2.7/dist-packages/PIL/<stdin>", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/usr/lib/python2.7/dist-packages/gst-0.10/<stdin>", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/usr/lib/python2.7/dist-packages/gtk-2.0/<stdin>", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/usr/lib/pymodules/python2.7/<stdin>", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/usr/lib/pymodules/python2.7/libubuntuone/<stdin>", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/usr/lib/python2.7/dist-packages/ubuntu-sso-client/<stdin>", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/usr/lib/python2.7/dist-packages/ubuntuone-client/<stdin>", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/usr/lib/python2.7/dist-packages/ubuntuone-control-panel/<stdin>", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/usr/lib/python2.7/dist-packages/ubuntuone-couch/<stdin>", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/usr/lib/python2.7/dist-packages/ubuntuone-installer/<stdin>", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol/<stdin>", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/usr/lib/python2.7/dist-packages/wx-2.8-gtk2-unicode/<stdin>", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
NameError: name 'foo' is not defined
>>>
|
|||
| msg157810 - (view) | Author: Ned Deily (ned.deily) * (Python committer) | Date: 2012年04月08日 21:47 | |
That does seem like silly behavior. On the other hand, the only ill effect is likely the time required to execute the series of open calls which, in the interactive case, would not even be noticed on most systems. Would you be interested in writing a patch? |
|||
| msg157811 - (view) | Author: Edward Yang (ezyang) * | Date: 2012年04月08日 21:52 | |
"<stdin>" is a valid name of a file on Unix systems. So the fix is not so clear. ezyang@javelin:~$ python Python 2.7.2+ (default, Oct 4 2011, 20:03:08) [GCC 4.6.1] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> a Traceback (most recent call last): File "<stdin>", line 1, in <module> Here’s an idea: when a (multi-variable) calculus course arrives at the topic of the *chain rule*, it should use as a worked example the multilayer perceptron—a topic you usually only find in an introductory artificial intelligence course. In fact, it’s ideal, since the treatment of this topic in most AI courses (at this point, I’ve taken two—a byproduct of slightly mismatched class schedules when you study abroad) involves *no* extra theoretical computer science content whatsoever. If you know the definition of a multilayer perceptron, any Calculus student who knows the chain rule should be able to work out the back-propagation algorithm—or perhaps I should call it a *recurrence.* NameError: name 'a' is not defined |
|||
| msg157826 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2012年04月08日 23:48 | |
The filename is retrieved from: traceback->frame->f_code->co_filename. co_filename is an arbitrary string. Example:
>>> exec(compile("1+a", "/etc/passwd", "exec"))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/etc/passwd", line 1, in <module>
root:x:0:0:root:/root:/bin/bash
NameError: name 'a' is not defined
"root:x:0:0:root:/root:/bin/bash" is the first line of the /etc/passwd file.
|
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:57:28 | admin | set | github: 58736 |
| 2020年11月15日 23:41:51 | iritkatriel | set | status: open -> closed superseder: Traceback display code can attempt to open a file named "<stdin>" resolution: duplicate stage: needs patch -> resolved |
| 2013年04月20日 12:30:43 | isoschiz | set | nosy:
+ isoschiz |
| 2012年09月06日 12:28:22 | ainur0160 | set | nosy:
+ ainur0160 |
| 2012年04月08日 23:48:48 | vstinner | set | messages: + msg157826 |
| 2012年04月08日 23:34:06 | pitrou | set | nosy:
+ vstinner |
| 2012年04月08日 21:52:19 | ezyang | set | messages: + msg157811 |
| 2012年04月08日 21:47:37 | ned.deily | set | priority: normal -> low versions: + Python 3.2, Python 3.3, - Python 3.4 nosy: + ned.deily messages: + msg157810 stage: needs patch |
| 2012年04月08日 19:01:22 | ezyang | create | |