80 lines
3.2 KiB
Markdown
80 lines
3.2 KiB
Markdown
# 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 | 文件 |
|
||
|