python3xiaobaike_2020/chapter8/8-3 python3小白课:查看详细异常信息.md
2025-04-20 23:22:14 +08:00

80 lines
3.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# python3小白课查看详细异常信息
### 异常对象的属性
之前我们介绍过`except Exception as e`中的`e`这个被赋值的异常对象,它里面承载了一些异常的相关信息,我们是可以获取的。它有如下几个属性:
* args该属性返回异常的错误编号和描述字符串。是errno和strerror属性的结合返回的是元组。
* errno该属性返回异常的错误编号。
* strerror该属性返回错误的描述字符串
我们来看个简单的例子:
```python
# 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():将异常传播轨迹转换成字符串。
我们可以来看一个实际的例子:
```python
# 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 | 文件 |