【发布时间】:2016-06-29 23:25:11
【问题描述】:
我们正在开发一个中型商业 Python 项目,并且在使用标准库中的函数时遇到一个反复出现的问题。
标准库的文档通常没有列出函数可以抛出的所有(甚至任何)异常,所以我们尝试了所有我们能想到的错误情况,查看库的源代码并然后抓住任何合理的东西。但是我们经常会错过一个仍然可能发生但我们没有想到的随机错误。例如,我们错过了,如果任何内置常量拼写错误(例如 True 而不是 true),json.loads() 会引发 ValueError。
在其他情况下,我们试图只捕获异常,因为这部分代码非常关键,它不应该因为异常而中断,而应该重试。这里的问题是,它甚至捕获了 KeyboardInterrupt。
那么,有没有什么方法可以找到函数可以引发的所有异常,即使文档没有说明这一点? 是否有任何工具可以确定可以引发哪些异常?
【问题讨论】:
-
如果您不想捕获键盘中断,您可以捕获
StandardError,但是没有工具 AFAIK 可以静态地告诉您函数在运行时可能引发的错误。 -
FWIW,
KeyboardInterrupt不继承自Exception所以except Exception不应该捕获KeyboardInterrupts...
标签: python