3.2 KiB
3.2 KiB
python3小白课:查看详细异常信息
异常对象的属性
之前我们介绍过except Exception as e中的e这个被赋值的异常对象,它里面承载了一些异常的相关信息,我们是可以获取的。它有如下几个属性:
- args:该属性返回异常的错误编号和描述字符串。是errno和strerror属性的结合,返回的是元组。
- errno:该属性返回异常的错误编号。
- strerror:该属性返回错误的描述字符串
我们来看个简单的例子:
# coding:utf-8
try:
# 使用open方法打开一个当前目录的txt文本文件,如果文件不存在,会抛出异常
f = open("a.txt")
except Exception as e:
print(e.args)
print("-" * 40)
print(e.errno)
print("-" * 40)
print(e.strerror)
[!danger]
有的异常类没有一些属性比如errno,这时候强行获取这些属性可能会报错。
异常的传播轨迹
有一个traceback模块可以用来处理异常传播的轨迹,标明异常发生在哪个文件、哪一行、哪个函数处。
关于传播轨迹,如果你仔细观察,我们日常不进行异常处理的报错时看到的python解释器的Traceback就是传播轨迹。传播轨迹可能是层层传导的,有时候轨迹会很长,但不要惊慌,它们可能就是同一个错误引发的,每一个错误向上一层传导,直到传导到python解释器停止程序。我们需要学会阅读和理解传播轨迹,可以更好的帮助我们定位代码中存在的问题。
traceback模块常用的有如下两个方法:
- print_exc():将异常传播轨迹输出到控制台或者存到文件中。
- format_exc():将异常传播轨迹转换成字符串。
我们可以来看一个实际的例子:
# coding:utf-8
import traceback
try:
# 使用open方法打开一个当前目录的txt文本文件,如果文件不存在,会抛出异常
f = open("a.txt")
except Exception as e:
# 将异常传播轨迹信息输出到控制台
traceback.print_exc()
print("-" * 40)
# 将异常传播轨迹信息保存到log.txt文件中,打开文件的模式为a(追加内容模式)
# 这一步不会有任何的内容输出到控制台
traceback.print_exc(file=open("log.txt", 'a'))
print("-" * 40)
# 将异常传播轨迹信息转换成文本,但如果要在控制台输出需要加print
print(traceback.format_exc())
这里详细演示了几种用法来展示异常传播轨迹信息,大家可以根据自己的需要,选择使用。
单词释义
| 单词 | 释义 |
|---|---|
| args | arguments参数的简写形式 |
| errno | error no错误编号的简写形式 |
| strerror | string error错误字符串的简写形式 |
| open | 打开,一个内置的打开文件的命令 |
| traceback | 回溯,追溯 |
| print_exc | print exception打印异常信息的简写 |
| format_exc | format exception格式化异常信息的简写 |
| file | 文件 |