4

如果我按特定顺序导入了两个库,Python 不会退出。我正在使用 python 库scitoolsfenicstools

在 python shell 中,以下将起作用:

import fenicstools
import scitools
exit()

这不会退出但会挂起(反转导入):

import scitools      # ok
import fenicstools   # ok
exit()               # gets me stuck, I can still exit with Ctrl+C

我可以在两台 Ubuntu 14.04 机器上重现这一点,但现在完全不知所措。我什至如何开始调试这样的问题?

背景:我正在使用苏门答腊来跟踪我的数值模拟。它收集并记录我的项目依赖项的版本。因此,我无法控制它尝试这样做的顺序。结果:卡住了。

编辑: 按照@ErlVolton 的建议,我尝试了 pdb。将两个导入按有问题的顺序放入一个名为test.py.

$ pdb test.py
> /home/gallomania/test.py(1)<module>()
-> import scitools
(Pdb) n
> /home/gallomania/test.py(2)<module>()
-> import fenicstools
(Pdb) n
--Return--
> /home/gallomania/test.py(2)<module>()->None
-> import fenicstools
(Pdb) exit

...这使得 pdb 不退出。

4

1 回答 1

0

使用 pdb 单步执行每个操作并查看 fenicstools 挂在了哪一行代码中__init__.py

https://docs.python.org/2/library/pdb.html

例子:

$ pdb test.py
> /home/cleekley/test/test.py(1)<module>()
-> import sys
(Pdb) s
> /home/cleekley/test/test.py(2)<module>()
-> import time
(Pdb) s
> /home/cleekley/test/test.py(4)<module>()
-> while True:
(Pdb) s
> /home/cleekley/test/test.py(5)<module>()
-> time.sleep(1)
(Pdb) s
> /home/cleekley/test/test.py(4)<module>()
-> while True:
(Pdb) quit
于 2014-10-09T16:27:53.587 回答