5

所以,我正在开发这个有索引器的类。我想抛出(或用 Python 术语“引发”)一个 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

我觉得这种奇怪,我想对实现者隐藏我的类的内部工作,而不是提供有关从外部模块提取的文件、行和代码的信息。

有什么办法可以管理这个吗?引发错误的所有意义在于提供足够的信息来描述函数调用出错的原因,而不是在外部代码中引发错误的位置。

4

1 回答 1

5

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

compileall您可以使用stdlib 模块 控制字节码文件的生成方式:http: //docs.python.org/2/library/compileall.html

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

于 2013-03-16T12:59:30.133 回答