为什么Python在使用绝对路径执行时不会从引发的异常中退出?

ssj*_*ic1 10 python exception-handling

已解决:重新启动计算机似乎已删除此问题.如果问题返回,我会更新.

我遇到了Python2.6引发异常后挂起的问题,特别foo.py是在使用绝对路径(/home/user/bar/foo.py)调用时.然后我被要求ctrl+c退出该计划.如果从bar目录中作为./foo.py或从根目录调用./home/user/bar/foo.py,则程序正确终止.

foo.py:

#!/usr/bin/env python2.6
print 'begin'
x = [0, 1, undefined]
print 'x'
Run Code Online (Sandbox Code Playgroud)

要么

#!/usr/bin/env python2.6
print 'begin'
raise Exception('stopping here')
Run Code Online (Sandbox Code Playgroud)

我也可以提一下,sys.exit()工作正常,没有问题.

#!/usr/bin/env python2.6
import sys
print 'begin'
sys.exit(0)
Run Code Online (Sandbox Code Playgroud)

未能终止程序的异常发生了什么?这可能是我的配置特有的.我应该从哪里开始寻找解决方案?

编辑: execfile('/home/user/bar/foo.py')如果运行交互模式,工作正常.此外,运行会nohup /home/user/bar/foo.py &导致必须终止的挂起过程.

运行CentOS版本6.3(最终版).这个问题并不总是存在.这只是一个月前开始的一个周末(我当时没有使用机器).

更新:使用GDB进行调试,回溯指向libpthread.so.0.

#0  0x000000364340e890 in __connect_nocancel () from /lib64/libpthread.so.0
#1  0x00007ffff18960d8 in ?? () from /usr/lib64/python2.6/lib-dynload/_socketmodule.so
#2  0x00007ffff189815c in ?? () from /usr/lib64/python2.6/lib-dynload/_socketmodule.so
#3  0x00007ffff7d0a706 in PyEval_EvalFrameEx () from /usr/lib64/libpython2.6.so.1.0
#4  0x00007ffff7d0c797 in PyEval_EvalCodeEx () from /usr/lib64/libpython2.6.so.1.0
#5  0x00007ffff7d0abe4 in PyEval_EvalFrameEx () from /usr/lib64/libpython2.6.so.1.0
#6  0x00007ffff7d0bccf in PyEval_EvalFrameEx () from /usr/lib64/libpython2.6.so.1.0
#7  0x00007ffff7d0bccf in PyEval_EvalFrameEx () from /usr/lib64/libpython2.6.so.1.0
#8  0x00007ffff7d0c797 in PyEval_EvalCodeEx () from /usr/lib64/libpython2.6.so.1.0
#9  0x00007ffff7c9adb0 in ?? () from /usr/lib64/libpython2.6.so.1.0
#10 0x00007ffff7c70303 in PyObject_Call () from /usr/lib64/libpython2.6.so.1.0
#11 0x00007ffff7d04dd3 in PyEval_CallObjectWithKeywords () from /usr/lib64/libpython2.6.so.1.0
#12 0x00007ffff7d28cd2 in PyErr_PrintEx () from /usr/lib64/libpython2.6.so.1.0
#13 0x00007ffff7d29297 in PyRun_SimpleFileExFlags () from /usr/lib64/libpython2.6.so.1.0
#14 0x00007ffff7d35c32 in Py_Main () from /usr/lib64/libpython2.6.so.1.0
#15 0x000000364281ecdd in __libc_start_main () from /lib64/libc.so.6
#16 0x0000000000400649 in _start ()
Run Code Online (Sandbox Code Playgroud)

谁知道这意味着什么?

ssj*_*ic1 0

  • 重新启动机器。

在全能管理员的帮助下,我能够重新启动机器。一切都很好。如果问题再次出现,我会更新问题。