Python 捕获代码中所有异常的方法

作者:David Beazley 时间:2022-08-31 06:44:00 

问题

怎样捕获代码中的所有异常?

解决方案

想要捕获所有的异常,可以直接捕获 Exception 即可:


try:
 ...
except Exception as e:
 ...
 log('Reason:', e)    # Important!

这个将会捕获除了 SystemExitKeyboardInterruptGeneratorExit 之外的所有异常。 如果你还想捕获这三个异常,将 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

标签:Python,捕获,异常
0
投稿

猜你喜欢

  • 使用Python3 poplib模块删除服务器多天前的邮件实现代码

    2023-05-08 08:21:54
  • IE事件对象(The Internet Explorer Event Object)

    2024-02-26 01:55:18
  • 第五章之BootStrap 栅格系统

    2024-05-05 09:14:46
  • Pygame实现监听鼠标示例详解

    2021-12-16 00:42:58
  • 一次Mysql使用IN大数据量的优化记录

    2024-01-29 07:49:19
  • 彻底弄懂CSS盒子模式之一(DIV布局快速入门)

    2007-05-11 17:03:00
  • Bootstrap Paginator分页插件使用方法详解

    2023-09-05 23:08:42
  • 用python标准库difflib比较两份文件的异同详解

    2023-01-29 07:34:29
  • Mysql5.7中使用group concat函数数据被截断的问题完美解决方法

    2024-01-18 02:00:39
  • 8个js表单验证函数

    2007-10-28 19:19:00
  • JavaScript队列的应用实例详解【经典数据结构】

    2024-04-16 09:53:13
  • js实现直播点击飘心效果

    2024-02-24 18:29:22
  • python ChainMap的使用和说明详解

    2022-03-03 08:22:30
  • Vue.js实现一个SPA登录页面的过程【推荐】

    2024-04-26 17:39:41
  • Python中使用双下划线防止类属性被覆盖问题

    2021-05-04 04:02:44
  • Django media static外部访问Django中的图片设置教程

    2023-03-05 03:51:15
  • Go语言使用select{}阻塞main函数介绍

    2024-04-30 10:06:32
  • python xlwt如何设置单元格的自定义背景颜色

    2022-07-25 10:41:05
  • JS延时器提示框的应用实例代码解析

    2024-05-10 14:00:28
  • php下防止单引号,双引号在接受页面转义的设置方法

    2023-11-15 02:37:01
  • asp之家 网络编程 m.aspxhome.com