Python 捕获代码中所有异常的方法
作者:David Beazley 发布时间:2022-08-31 06:44:00
标签:Python,捕获,异常
问题
怎样捕获代码中的所有异常?
解决方案
想要捕获所有的异常,可以直接捕获 Exception 即可:
try:
...
except Exception as e:
...
log('Reason:', e) # Important!
这个将会捕获除了 SystemExit
、 KeyboardInterrupt
和 GeneratorExit
之外的所有异常。 如果你还想捕获这三个异常,将 Exception
改成 BaseException
即可。
讨论
捕获所有异常通常是由于程序员在某些复杂操作中并不能记住所有可能的异常。 如果你不是很细心的人,这也是编写不易调试代码的一个简单方法。
正因如此,如果你选择捕获所有异常,那么在某个地方(比如日志文件、打印异常到屏幕)打印确切原因就比较重要了。 如果你没有这样做,有时候你看到异常打印时可能摸不着头脑,就像下面这样:
def parse_int(s):
try:
n = int(v)
except Exception:
print("Couldn't parse")
试着运行这个函数,结果如下:
>>> parse_int('n/a')
Couldn't parse
>>> parse_int('42')
Couldn't parse
>>>
这时候你就会挠头想:“这咋回事啊?” 假如你像下面这样重写这个函数:
def parse_int(s):
try:
n = int(v)
except Exception as e:
print("Couldn't parse")
print('Reason:', e)
这时候你能获取如下输出,指明了有个编程错误:
>>> parse_int('42')
Couldn't parse
Reason: global name 'v' is not defined
>>>
很明显,你应该尽可能将异常处理器定义的精准一些。 不过,要是你必须捕获所有异常,确保打印正确的诊断信息或将异常传播出去,这样不会丢失掉异常。
来源:https://python3-cookbook.readthedocs.io/zh_CN/latest/c14/p07_catching_all_exceptions.html
0
投稿
猜你喜欢
- 有过网页制作经验的朋友一定知道:一般来讲,把表格的边框定义为1px时,即border=1,而实际上是2
- 前端的小伙伴们在babel等的加持下,已经可以愉快的使用es6来写代码了。然后对于服务端的nodejs就有点坑爹了,虽然原生支持了es6,但
- 代码如下:<?php$a;$b = false;$c = '';$d = 0;$e = null;$f = array
- 由于在遭遇到这个页面之前我们一 * 互刚好在讨论交互设计原则之类的话题,其中有一条是:包容性,即满足主体用户需求的同时,尽可能兼顾非主体用户需
- 测试代码:输出简单的ul li1.asp代码如下:<% response.write "<ul>" r
- PHP lcfirst() 函数实例把 "Hello" 的首字符转换为小写。:<?php echo lcfirst
- 一、前言:当数据库服务器建立好以后,我们首先要做的不是考虑要在这个支持数据库的服务器运行哪些受MySQL提携的程序,而是当数据库遭到破坏后,
- 译者按:我们时常能看到不同JavaScript库/框架之间的各种比较,但这次 YUI3 架构师和 jQuery 之父的直接对话却非常难得,也
- 1.尽量不要对列名进行函数处理。而是针对后面的值进行处理例如where col1 = -5的效率比where -col1=5的效率要高因为后
- 请问如何使用CDONTS组件来发送电子邮件?我们可以在IIS4下使用CDONTS来完成。首先要确认是否安装了SMTP服务(OPTIONPAC
- <script>var d = '2013-07-21';var nd = d.replace(new RegE
- 一、Pandoc转换1.1 问题由于我们markdown编辑器比较特殊,一般情况下,我们不太好看,如果转换成pdf的话,我们就不需要可以的去
- 运行截图运行效果:什么?你说你看不清烟花?那我换一种颜色,请点开看。实现过程准备工作使用语言和框架:python、pygame。安装pyga
- 在Windows平台上,从原来使用C/C++编写原生EXE程序,到使用Python编写一些常用脚本程序,成熟的模块的使用使得编程效率大大提高
- package work;import java.io.BufferedReader;import java.io.IOException;
- 本文向大家分享23种JavaScript提高执行效率的小技巧、最佳实践等非常实用的内容。当然JavaScript的实用技巧不止这些,还有很多
- 常见到网上博文有错误理论,包括身边很多朋友都曾认同“可访问性(Accessibility)是为残障人士准备”的观点。其实在互联网技术领域远不
- 一. 建库,建表,加约束. 1.1建库 代码如下:use master go if exists (select * from sysdat
- test.asp 测试演示文件clsrsa.asp 实现rsa加密与解密的vbs类文件下面是代码:1. test.asp<%rem 文
- 建立池连接可以显著提高应用程序的性能和可缩放性。SQL Server .NET Framework 数据提供程序自动为 ADO.NET 客户