我对IPython给出异常的以下输出感到恼火:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-3-4c27956d23f6> in <module>()
----> 1 parameterStudyPageRankNibble()
/Users/cls/Desktop/LFR/scripts/scd_experiments.py in parameterStudyPageRankNibble()
AttributeError: 'tuple' object has no attribute 'values'
/Users/cls/Desktop/LFR/scripts/scd_experiments.py
不是执行脚本的路径。 IPython以某种方式混合在一起
脚本文件的路径和当前的工作目录。如果抛出异常,我该怎么做才能获得更多有用的信息?
答案 0 :(得分:1)
这与如何将代码加载到IPython中有关。 (如果你告诉我们如何重现你的问题会很有帮助。)
例如,如果我使用emacs的M-x py-execute-region
,则代码区域将复制到临时文件,IPython解释器将在临时文件上运行execfile
。
以这种方式使用emacs / IPython时,没有有用的回溯。
相反,如果您导入脚本,然后调用函数:
import scd_experiments as SE
SE.parameterStudyPageRankNibble()
然后你会看到一个有用的追溯信息。
演示:script.py
def foo():
1/0
如果我选择了该地区并致电M-x py-execute-region
,
In [15]: ## working on region in file /tmp/python-4126aNj.py...
In [16]: foo()
---------------------------------------------------------------------------
ZeroDivisionError Traceback (most recent call last)
<ipython-input-16-624891b0d01a> in <module>()
----> 1 foo()
/tmp/python-4126aNj.py in foo()
ZeroDivisionError: integer division or modulo by zero
但是如果我导入模块:
In [19]: import script
In [20]: script.foo()
---------------------------------------------------------------------------
ZeroDivisionError Traceback (most recent call last)
<ipython-input-20-3ae0d96fd279> in <module>()
----> 1 script.foo()
/home/unutbu/pybin/script.py in foo()
8
9 def foo():
---> 10 1/0
ZeroDivisionError: integer division or modulo by zero
答案 1 :(得分:0)
WRT通过unutbu回答:
python-mode.el不应该只说“模块”,而是显示调用的缓冲区或文件的名称,似乎有些东西被打破了:
https://bugs.launchpad.net/python-mode/+bug/1318991
执行source时默认也必须读取导入, 这里不需要明确设置PYTHONPATH。
在上下文中可能值得一提:
py-execute -...命令可以根据选项使用与默认值不同的后端
python-mode-v5-behavior-p
py-execute-no-temp-p
py-fast-process-p
使用python-mode.el v5系列
shell-command-on-region
。那个时候存在bug
lp:550661,WRT unicode符号u'\ xA9',©
通过运行来自的东西可以避免这个错误 临时文件。哪个是默认值。一个 从Python发送的错误消息比指向的 临时文件 - 需要在。处理 Emacs方面。
由于用户希望保持简单的旧程序,
python-mode-v5-behavior-p
是作为选项提供的。
为了在没有系统的情况下加速和/或执行
写权限,较新的后端避免写入
临时文件。内在依赖
process-send-string
。自定义py-execute-no-temp-p
启用它。
v6系列内容由交互式处理 (I)Python shell。这允许进一步的互动 调查。背面由lp显示:1253907 - 具有大量输出,可以使用comint簿记 相比之下,Emacs变慢了。冻结。
因此引入了选项`py-fast-process-p' - 参见 菜单“Python / Fast process ...”避免使用Python shell, 结果到达缓冲区“* Python输出*”。
对于6.1.3版,可选的py-fast-process-p
不是
已发布,可在主干中使用。