python – 查找函数可以引发的所有异常
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 查找函数可以引发的所有异常,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1964字,纯文字阅读大概需要3分钟。
内容图文
![python – 查找函数可以引发的所有异常](/upload/InfoBanner/zyjiaocheng/773/c9c4de589a8247e2ab991533fafc17d6.jpg)
参见英文答案 > Python: How can I know which exceptions might be thrown from a method call 7个
我们正在开发一个中型商业Python项目,在使用标准库中的函数时会遇到一个重新解决问题.
标准库的文档通常不会列出函数可以抛出的所有(甚至任何)异常,因此我们尝试了所有可以提出的错误情况,查看库的源代码然后捕获任何内容似乎是合情合理的.但是我们常常会错过一个仍然可能发生的随机错误,但我们没有提出.例如,我们错过了,如果任何内置常量拼写错误(例如True而不是true),json.loads()可以引发ValueError.
在其他情况下,我们试图捕获异常,因为代码的这一部分是如此关键,它应该永远不会破坏异常,而应该再次尝试.这里的问题是它甚至捕获了KeyboardInterrupt.
那么,有没有办法找到函数可以引发的所有异常,即使文档没有说明这一点?
是否有任何工具可以确定可以引发的异常?
解决方法:
除了阅读该函数中可以采用的所有可能的代码路径并查看可以在那里引发的异常之外,没有其他方法可以做到这一点.我想可以编写一些自动化工具来实现这一点,但即使这样也很棘手,因为由于python的动态特性,几乎任何异常都可以从任何地方引发(如果我真的想要,我总是可以修补一个依赖函数具有不同的功能,完全提升其他东西).
猴子修补一边,要真正做到正确,你需要一个非常好的类型推理器(也许是astroid可以帮助?)来推断可能通过访问不存在的成员或使用错误的参数调用函数而引发的各种TypeError或AttributeError, ValueError特别棘手,因为当你传递正确类型的东西时它仍然会被引发.
In other cases, we tried to just catch Exception, because that part of the code is so critical, that it should never break on an Exception, but should rather try again. The problem here is, that it even caught the KeyboardInterrupt.
这对我来说是一个坏主意.首先,重试代码应仅针对可能在您重试时产生不同结果的异常(奇怪的连接问题等).对于ValueError案例,您只需再次引发ValueError.这里最好的情况是允许ValueError在第二次调用时传播出异常处理程序 – 最坏的情况是你最终陷入无限循环(或RecursionError),你真的没有得到太多信息帮助调试.
捕获异常应该是最后的手段(并且它不应该捕获KeyboardInterrupt或SystemExit,因为它们不会从Exception继承)并且应该只格式化某种错误消息,有人可以使用它来跟踪问题并修复它.
内容总结
以上是互联网集市为您收集整理的python – 查找函数可以引发的所有异常全部内容,希望文章能够帮你解决python – 查找函数可以引发的所有异常所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。