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

5 投票
1 回答
2132 浏览
提问于 2025-04-17 19:18

我正在开发一个类,这个类里面有一个索引器。我想要抛出一个索引错误(在Python里叫“raise”)。这其实挺简单的,

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 个回答

5

如果你把代码分发成 .pyc 字节码文件(通常是在第一次导入模块时自动生成的),或者故意让生成的 .pyc 文件没有正确的 .py 源文件路径(比如移动或删除源文件),那么在出错时的堆栈跟踪信息就会省略源代码的行数。

你可以使用 compileall 这个标准库模块来控制字节码文件的生成方式: http://docs.python.org/2/library/compileall.html

正如评论者所提到的,这种情况比较少见——多出来的信息可以在调试生产问题时节省宝贵的时间。

撰写回答