所以,我正在开发这个有索引器的类。我想抛出(或者#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
我发现这种奇怪,我想隐藏我的类的内部工作方式,而不是从外部模块中提供有关文件,行和代码提取的信息。
有没有办法管理这个?提出错误的所有方面是提供足够的信息来描述函数调用出错的原因,而不是在外部代码中引发错误的位置。
答案 0 :(得分:4)
如果您将代码分发为.pyc字节码文件(通常在首次导入模块时自动生成),或者设法生成的.pyc文件没有正确的.py源文件路径(通过移动/删除源文件),堆栈跟踪将省略源代码行。
您可以使用compileall
stdlib模块控制字节码文件的生成方式:{{3}}
正如评论者指出的那样,这是不寻常的 - 额外的信息可以节省调试生产问题的宝贵时间。