Python(二十八)python 获取异常信息

简介: 在实际的开发工作中,我们光知道异常类型是不够的,我们还需要看到更详细的报错信息。那么,我们应该如何看到报错信息呢?Python中为我们提供了两个可以查看标错信息的库,sys 模块中的 exc_info,traceback 模块这是我们第一次使用python的模块在文件中使用python的模块,需要引入才可以使用。 一:使用 sys 模块中的 exc_info 方法:1:exc_info() 方法会将当前的异常信息以元组的形式返回,该元组中包含 3 个元素,分别为 type、value 和 traceback,它们的含义分别是:type:异常类型的名称,python异常类型请参照

在实际的开发工作中,我们光知道异常类型是不够的,我们还需要看到更详细的报错信息。

那么,我们应该如何看到报错信息呢?

Python中为我们提供了两个可以查看标错信息的库,sys 模块中的 exc_info,traceback 模块

这是我们第一次使用python的模块

在文件中使用python的模块,需要引入才可以使用。

一:使用 sys 模块中的 exc_info 方法:

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

type:异常类型的名称,python异常类型请参照菜鸟教程《Python 异常处理

value:捕获到的异常实例。

traceback:是一个 traceback 对象。

2:使用实例

python

复制代码

import sys
try:
    a = input("请输入一个数:")
    #判断用户输入的是否为数字
    if(not a.isdigit()):
        raise ValueError("a 必须是数字")
except ValueError as e:
    print(sys.exc_info())
    print("引发异常:",e)

输出:

请输入一个数:a
(<class 'ValueError'>, ValueError('a 必须是数字'), <traceback object at 0x00000209CCC19188>)

引发异常: a 必须是数字

我们通过返回值可以看出,sys.exc_info()返回的是一个元组,第一个值是异常的类型,第二个值是带异常信息,第三个值是一个 traceback 对象,无法直接看出有关异常的信息,还需要对其做进一步处理。

我们来修改一下上边的实例:

python

复制代码

import sys
import traceback
try:
    a = int(input("请输入一个数:"))
    #判断用户输入的是否为数字
    print("30除以", a, "等于", 30 / a)
except ValueError as e:
    # print(sys.exc_info())
    traceback.print_tb(sys.exc_info()[2])
    print("引发异常:",e)

输出:

arduino

复制代码

请输入一个数:0
Traceback (most recent call last):
  File "F:/camellia/python/testProject/main.py", line 51, in <module>
    import errorr
  File "F:\camellia\python\testProject\errorr.py", line 81, in <module>
    print("30除以", a, "等于", 30 / a)
ZeroDivisionError: division by zero

 

二:使用 traceback 模块中的相关函数:

traceback 模块,可以用来查看异常的传播轨迹,追踪异常触发的源头。

我看到了一个大神用来演示traceback的代码实例:

ruby

复制代码

class SelfException(Exception):
    pass
def mains():
    firstMethod()
def firstMethod():
    secondMethod()
def secondMethod():
    thirdMethod()
def thirdMethod():
    raise SelfException("自定义异常信息")
mains()

上面程序中 main() 函数调用 firstMethod(),firstMethod() 调用 secondMethod(),secondMethod() 调用 thirdMethod(),thirdMethod() 直接引发一个 SelfException 异常。运行上面程序,将会看到如下所示的结果:

arduino

复制代码

Traceback (most recent call last):
  File "F:/camellia/python/testProject/main.py", line 51, in <module>
    import errorr
  File "F:\camellia\python\testProject\errorr.py", line 99, in <module>
    mains()
  File "F:\camellia\python\testProject\errorr.py", line 91, in mains
    firstMethod()
  File "F:\camellia\python\testProject\errorr.py", line 93, in firstMethod
    secondMethod()
  File "F:\camellia\python\testProject\errorr.py", line 95, in secondMethod
    thirdMethod()
  File "F:\camellia\python\testProject\errorr.py", line 97, in thirdMethod
    raise SelfException("自定义异常信息")
errorr.SelfException: 自定义异常信息

 

从输出结果可以看出,异常从 thirdMethod() 函数开始触发,传到 secondMethod() 函数,再传到 firstMethod() 函数,最后传到 mains() 函数,在 mains() 函数止,这个过程就是整个异常的传播轨迹。

我们可以通过这个轨迹,来追寻整个报错的源头

traceback模块有两个常用方法:

(1):traceback.print_exc():将异常传播轨迹信息输出到控制台或指定文件中。

(2):format_exc():将异常传播轨迹信息转换成字符串。

我们使用traceback.print_exc()来修改一下上边的示例:

scss

复制代码

import traceback
class SelfException(Exception):
    pass
def mains():
    firstMethod()
def firstMethod():
    secondMethod()
def secondMethod():
    thirdMethod()
def thirdMethod():
    raise SelfException("自定义异常信息")
try:
    mains()
except:
    # 捕捉异常,并将异常传播信息输出控制台
    traceback.print_exc()
    # 捕捉异常,并将异常传播信息输出指定文件中(log.txt在当前代码运行目录中)
    traceback.print_exc(file=open('log.txt', 'a'))

更多应用,请参照《Python3 错误和异常

有好的建议,请在下方输入您的评论。

目录
相关文章
|
7月前
|
运维 监控 算法
时间序列异常检测:MSET-SPRT组合方法的原理和Python代码实现
MSET-SPRT是一种结合多元状态估计技术(MSET)与序贯概率比检验(SPRT)的混合框架,专为高维度、强关联数据流的异常检测设计。MSET通过历史数据建模估计系统预期状态,SPRT基于统计推断判定偏差显著性,二者协同实现精准高效的异常识别。本文以Python为例,展示其在模拟数据中的应用,证明其在工业监控、设备健康管理及网络安全等领域的可靠性与有效性。
848 13
时间序列异常检测:MSET-SPRT组合方法的原理和Python代码实现
|
3月前
|
前端开发 数据安全/隐私保护 Python
虚拟物流单号生成器, 虚拟快递单号假物流信息, 虚拟快递单号在线生成【python框架】
这个虚拟物流单号生成系统包含以下功能:支持多种主流快递公司的单号生成
|
3月前
|
数据安全/隐私保护 数据格式 Python
快递单号模拟生成器, 虚拟物流信息在线生成,虚假快递单号生成器【python】
支持多种主流快递公司生成符合各快递公司规则的快递单号自动生成收发件人信息
|
3月前
|
JSON 前端开发 API
快递单号生成器在线, 快递单号模拟生成器, 虚拟物流信息在线生成【python】
项目包含三个主要模块:快递单号生成器核心逻辑、Flask Web应用程序和前端HTML页面
|
3月前
|
JSON API 数据安全/隐私保护
车辆五项信息查询 API 的实践指南:通过Python调用赋能车辆信息标准化
本API通过车牌号快速获取车辆五项核心信息,包括品牌、登记日期、车架号等,助力二手车评估、维修、保险等场景实现数字化转型。数据源自权威公安交管库,日更同步,毫秒级响应,满足高并发需求,符合隐私保护规范,是推动汽车后市场智能化的重要工具。
159 0
|
4月前
|
API Python
VIN码查询API的实战指南:获取二手车信息以Python为例
随着机动车保有量上升,中国二手车市场迎来发展机遇。本文介绍如何通过VIN码查询API获取车辆详细信息,提升交易透明度与安全性。
79 1
|
5月前
|
人工智能 C# Python
处理python异常
本文介绍了Python中的异常处理机制,并实现了一个简单的异常装饰器。通过`try/except`语句捕获异常,结合`finally`子句完成清理工作。为进一步优化代码结构,文章提出了使用装饰器处理异常的方法,避免函数中大量冗长的异常处理语句。通过类封装异常装饰器,多个函数可共享异常处理逻辑,提升代码简洁性和可维护性。总结强调了装饰器在异常处理中的优势,使代码更加优雅高效。
126 27
|
4月前
|
数据采集 存储 数据可视化
Python爬取招标信息并生成可视化分析报告
Python爬取招标信息并生成可视化分析报告
|
8月前
|
存储 算法 API
【01】整体试验思路,如何在有UID的情况下获得用户手机号信息,python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
【01】整体试验思路,如何在有UID的情况下获得用户手机号信息,python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
1147 82
|
6月前
|
存储 监控 API
【Azure App Service】分享使用Python Code获取App Service的服务器日志记录管理配置信息
本文介绍了如何通过Python代码获取App Service中“Web服务器日志记录”的配置状态。借助`azure-mgmt-web` SDK,可通过初始化`WebSiteManagementClient`对象、调用`get_configuration`方法来查看`http_logging_enabled`的值,从而判断日志记录是否启用及存储方式(关闭、存储或文件系统)。示例代码详细展示了实现步骤,并附有执行结果与官方文档参考链接,帮助开发者快速定位和解决问题。
164 23

推荐镜像

更多