在Python中引发错误,排除堆栈跟踪中的最后一级

时间:2013-03-16 11:32:38

标签: python debugging exception

所以,我正在开发这个有索引器的类。我想抛出(或者#34;在Python术语中引发#34;)一个IndexError异常。嗯,那非常微不足道,

if errorCondition:
    raise IndexError("index out of range")

但是,当此代码在控制台中运行并发生错误时,堆栈跟踪还包括引发错误的行:

Traceback (most recent call last):
  File "code.py", line 261, in <module>
    print myCards[99]
  File "Full/Path/To/The/module.py", line 37, in __getitem__
    raise IndexError("item index out of range")
IndexError: item index out of range

我发现这种奇怪,我想隐藏我的类的内部工作方式,而不是从外部模块中提供有关文件,行和代码提取的信息。

有没有办法管理这个?提出错误的所有方面是提供足够的信息来描述函数调用出错的原因,而不是在外部代码中引发错误的位置。

1 个答案:

答案 0 :(得分:4)

如果您将代码分发为.pyc字节码文件(通常在首次导入模块时自动生成),或者设法生成的.pyc文件没有正确的.py源文件路径(通过移动/删除源文件),堆栈跟踪将省略源代码行。

您可以使用compileall stdlib模块控制字节码文件的生成方式:{​​{3}}

正如评论者指出的那样,这是不寻常的 - 额外的信息可以节省调试生产问题的宝贵时间。