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


猜你喜欢
- 秉承MVC架构的思想,CI中的所有控制器都需要经过单点入口文件index.php(默认)来加载调用。也就是说,在默认情况下,所有CI开发项目
- 位运算,赋值状态时异或对应位数1的整形,判断状态则与运算对应位数1的整形。最大用处就是同时判断32位状态,节省存储空间,便于扩展, 
- 使用Django静态设置时,遇到很多问题,经过艰苦的Baidu, stack overflow, Django原档阅读,终于把静态图片给搞出
- django settings.py 配置文件import osBASE_DIR = os.path.dirname(os.path.dir
- MYSQL TIMESTAMP字段进行时间加减运算在数据分析过程中,想当然地对TIMESTAMP字段进行运算,导致结果谬之千里计算公式如下-
- 项目实现知识点:Pandas库及pyecharts库Pandas:数据分析和处理工具。pd.read_csv():读取csv文件。pyech
- 在pandas里,DataFrame是最经常用的数据结构,这里总结生成和添加数据的方法:①、把其他格式的数据整理到DataFrame中;②在
- datetime64与unix时间戳互转在用pandas处理数据时,经常要处理一些时间类型数据,经常把pandas时间类型与datetime
- 这篇文章主要介绍了java连接mysql数据库代码实例程序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要
- 目录1.Python语法错误2.Python运行时错误前言:开发人员在编写程序时,难免会遇到错误,有的是编写人员疏忽造成的语法错误,有的是程
- 解决方案在安装包的路径的../database/state/cvu/cvu_prereq.xml文件尾部添加如下:<OPERATING
- 本文实例为大家分享了python实现简易聊天室的具体代码,供大家参考,具体内容如下群聊聊天室1.功能:类似qq群聊功能1.有人进入聊天室需要
- 出现这个问题的原因不是'/xxx.frm'这个文件不见了,而是这些文件的权限(应该要是mysql)不知道为什么变成了root
- 前言:大家都知道,只要进行数据交互,肯定就要去请求接口,数据请求的方式有vue-resource axios fetch
- CSS中最常用的布局类属性,一个是Float(CSS浮动属性Float详解),另一个就是CSS定位属性Position。1. positio
- Python requests 模块requests 模块是我们使用的 python爬虫 模块 可以完成市场进80%的爬虫需求。安装pip
- 本文实例讲述了mysql基于正则实现模糊替换字符串的方法。分享给大家供大家参考,具体如下:例如: abcd(efg)hijk 替换之后是ab
- 本文实例为大家分享了python实现石头剪刀布的具体代码,供大家参考,具体内容如下老师布置了一个石头剪刀布的作业,要可视化,还是先用代码实现
- asp中使用addnew方法添加一条记录后,我们经常使用取得自递增的ID,而使用bookmark很容易实现这样的功能。rs.open&nbs
- 今天写的代码片段:X = Y = []..X.append(x)Y.append(y)其中x和y是读取的每一个数据的xy值,打算将其归入列表