【发布时间】:2013-11-20 05:12:18
【问题描述】:
我很困惑,为什么当我编写的模块内的函数中出现错误时,IPython 没有向我显示函数中导致错误的行的完整回溯。
注意:我对这个特定错误的原因并不感到困惑,而是为什么 IPython 没有向我显示原因。
我的模块名为module.py,它包含函数function,在其下方写入了一个if __name__ == '__main__' 块。 (模块和函数名称已更改以保护无辜者的身份——或者可能不是那么无辜。)
这是我在引发错误时得到的回溯。 (请注意缺少关于 function 中哪一行导致错误的信息。)
In [1]: import module as m
In [2]: call = m.function('hello')
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-2-ec0c1e40ec8c> in <module>()
----> 1 call = m.function('hello')
/home/module.py in function(greeting)
TypeError: join() takes exactly one argument (2 given)
【问题讨论】:
-
我不知道 IPython,但为什么会出现这个问题?该错误包含您需要的所有信息。
-
您能否详细说明
if __name__ == "__main__"位?该块中是否定义了函数?如果是这样,我不确定你的函数调用是如何工作的。能给个模块的SSCCE吗? -
错误没有我需要的所有信息。例如,假设
function中有很多join()调用。回溯并没有告诉我是哪一个引发了错误。这是不寻常的;回溯通常会将我指向源代码中引发错误的行。这种情况有些不同,我不确定是什么。 -
根据您的描述,我无法重现该错误。我用一个简单地引发
TypeError的函数和一个只有一个打印语句的if __name__ == "__main__":块创建了module.py。这会为您产生错误吗?如果没有,你能想出一个最小的例子来重现错误吗?如果是这样,您能否提供一些设置的详细信息(Python 版本、Ipython 版本等)? -
不,该函数未在
if __name__ == '__main__'块中定义。那太离谱了。此外,在我的问题中,我声明这个块在函数的“下方”。澄清一下,if __name__ == '__main__'块位于已完成的函数定义下方,位于return语句下方。