yyz notes yyz notes
首页
  • RBAC权限设计
  • 架构图标设计
  • 账号体系
  • python基础
  • python高级
  • python模块
  • python设计模式
  • python数据结构与算法
  • django
  • django-DRF
  • flask
  • 直接设计开源pip包
  • 直接设计开源项目
  • python示例题/脚本
  • python面试题
  • golang基础
  • golang高级
  • golang常用组件
  • gin框架
  • es6
  • javascript
  • react
  • vue
  • TypeScript
  • mysql
  • redis
  • minio
  • elasticsearch
  • mongodb
  • 消息队列
  • 自动化测试
  • 操作系统

    • linux
    • windows
  • nginx
  • docker
  • k8s
  • git
  • ldap
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

益章

可乐鸡翅
首页
  • RBAC权限设计
  • 架构图标设计
  • 账号体系
  • python基础
  • python高级
  • python模块
  • python设计模式
  • python数据结构与算法
  • django
  • django-DRF
  • flask
  • 直接设计开源pip包
  • 直接设计开源项目
  • python示例题/脚本
  • python面试题
  • golang基础
  • golang高级
  • golang常用组件
  • gin框架
  • es6
  • javascript
  • react
  • vue
  • TypeScript
  • mysql
  • redis
  • minio
  • elasticsearch
  • mongodb
  • 消息队列
  • 自动化测试
  • 操作系统

    • linux
    • windows
  • nginx
  • docker
  • k8s
  • git
  • ldap
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • python基础

    • python概述

    • python环境搭建

    • python基础语法

    • python关键字与标识符

    • python流程控制

    • python函数

    • python内置函数

    • python面向对象

    • python模块与包

    • python文件IO与OS

    • python异常处理机制

      • try except finally
      • 自定义异常 raise
      • 获取异常信息
        • 链接资料
        • 获取特定异常的有关信息
          • 示例
        • sys.exc_info()
          • 示例
        • traceback.print_tb
          • 示例
  • python高级

  • python模块

  • python设计模式

  • python数据结构与算法

  • django

  • django-DRF

  • flask

  • 自己设计开源pip包

  • 自己设计开源项目

  • python小示例

  • python面试题

  • python
  • python基础
  • python异常处理机制
YiZhang-You
2023-05-17
目录

获取异常信息

# 链接资料

  1. https://docs.python.org/zh-cn/3/tutorial/errors.html
  2. http://c.biancheng.net/python/try_except/
  3. https://python3-cookbook.readthedocs.io/zh_CN/latest/chapters/p14_test_debug_and_exceptions.html

在实际调试程序的过程中,有时只获得异常的类型是远远不够的,还需要借助更详细的异常信息才能解决问题。

捕获异常时,有 2 种方式可获得更多的异常信息,分别是:

  1. 使用 sys 模块中的 exc_info 方法;
  2. 使用 traceback 模块中的相关函数。

# 获取特定异常的有关信息

通过前面的学习,我们已经可以捕获程序中可能发生的异常,并对其进行处理。但是,由于一个 except 可以同时处理多个异常,那么我们如何知道当前处理的到底是哪种异常呢?

其实,每种异常类型都提供了如下几个属性和方法,通过调用它们,就可以获取当前处理异常类型的相关信息:

  • args:返回异常的错误编号和描述字符串;
  • str(e):返回异常信息,但不包括异常信息的类型;
  • repr(e):返回较全的异常信息,包括异常信息的类型。

# 示例

# 方式一
try:
    1 / 0
except Exception as e:
    # 访问异常的错误编号和详细信息
    print(e.args)
    print(str(e))
    print(repr(e))

"""
('division by zero',)
division by zero
ZeroDivisionError('division by zero')
"""
1
2
3
4
5
6
7
8
9
10
11
12
13
14

除此之外,如果想要更加详细的异常信息,可以使用 traceback 模块。有兴趣的读者,可自行查阅资料学习。

从程序中可以看到,由于 except 可能接收多种异常,因此为了操作方便,可以直接给每一个进入到此 except 块的异常,起一个统一的别名 e。

在 Python 2.x 的早期版本中,除了使用 as e 这个格式,还可以将其中的 as 用逗号(,)代替。

# sys.exc_info()

exc_info() 方法会将当前的异常信息以元组的形式返回,该元组中包含 3 个元素,分别为 type、value 和 traceback,它们的含义分别是:

  • type:异常类型的名称,它是 BaseException 的子类(有关 Python (opens new window) 异常类,可阅读《Python常见异常类型 (opens new window)》一节)
  • value:捕获到的异常实例。
  • traceback:是一个 traceback 对象。

# 示例

# 使用 sys 模块之前,需使用 import 引入
import sys

try:
    x = int(input("请输入一个被除数:"))
    print("30除以", x, "等于", 30 / x)
except:
    print(sys.exc_info())
    print("其他异常...")

"""
请输入一个被除数:s
(<class 'ValueError'>, ValueError("invalid literal for int() with base 10: 's'"), <traceback object at 0x0000021BE8B305C0>)
其他异常...
"""
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# traceback.print_tb

除了使用 sys.exc_info() 方法获取更多的异常信息之外,还可以使用 traceback 模块,该模块可以用来查看异常的传播轨迹,追踪异常触发的源头。
1

# 示例

# 使用 sys 模块之前,需使用 import 引入
import sys
# 引入traceback模块
import traceback

try:
    x = int(input("请输入一个被除数:"))
    print("30除以", x, "等于", 30 / x)
except:
    # print(sys.exc_info())
    traceback.print_tb(sys.exc_info()[2])
    print("其他异常...")

"""
其他异常...
  File "", line 22, in <module>
    x = int(input("请输入一个被除数:"))
"""
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

1

编辑 (opens new window)
上次更新: 2023/05/17, 23:08:21
自定义异常 raise
hashlib

← 自定义异常 raise hashlib→

最近更新
01
配置yun源
05-24
02
linux-配置python虚拟环境
05-24
03
linux文件目录管理
05-24
更多文章>
Theme by Vdoing | Copyright © 2023-2023 yizhang | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式