# 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 | 文件 |