python获取异常信息exc_info和print_exc的使用

 更新时间:2023年12月29日 09:22:05   作者:梯阅线条  
python通过sys.exc_info获取异常信息,通过traceback.print_exc打印堆栈信息,包括错误类型和错误位置等信息,本文就来介绍一下具体用法,感兴趣的可以了解一下

1 python获取异常信息exc_info和print_exc

python通过sys.exc_info获取异常信息,通过traceback.print_exc打印堆栈信息,包括错误类型和错误位置等信息。

1.1 异常不一定是错误

所有错误都是异常,但并非所有异常都是错误。比如,有些异常表示警告(参考warnings模块),有些异常是功能信号(比如,input函数从标准输入流sys.stdin读取输入)。

用法

while True:
    try:
        ins=input('请输入:')
    except EOFError as e:
        # except 代码块
        break
    else:
        print('你输入的是:',ins)

描述

(1) 通过input循环获取用户输入;

(2) 通过EOFError 作为功能信号,触发则退出输入;

(3) 通过Ctrl+D(windows)或Ctrl+Z(Unix)触发EOFError 异常;

示例

>>> import traceback
>>> while True:
    try:
        ins=input('请输入:')
    except EOFError as e:
        # 通过 Ctrl+D 或 Ctrl+Z 触发 EOFError
        print('遇到 Ctrl+D 或 Ctrl+Z,退出输入')
        print(traceback.print_exc())
        break
    else:
        print('你输入的是:',ins)

请输入:梯阅线条
你输入的是: 梯阅线条
请输入:
遇到 Ctrl+D 或 Ctrl+Z,退出输入
Traceback (most recent call last):
  File "<pyshell#58>", line 3, in <module>
EOFError: EOF when reading a line
None

1.2 异常条件语句和raise

python自定义异常也可用于触发非错误的情况,根据条件语句触发raise异常。

用法

class FoundByExc(Exception):pass
def search_by_exc(strlist,target):
    if True:
        raise FoundByExc("xxx")
    else:
        return "xxx"

描述

搜索指定内容时触发异常。

(1) 自定义一个异常类;

(2) 条件成立,触发异常;

示例

>>> class FoundByExc(Exception):pass

>>> def search_by_exc(strlist,target):
    for s in strlist:
        if s == target:
            raise FoundByExc("在{}找到'{}'".format(strlist,target))
        else:
            return "在{}未找到'{}'".format(strlist,target)

        
>>> def test_searchbyexc(strlist,target):
    try:
        sbe=search_by_exc(strlist,target)
    except FoundByExc as fbe:
        print(fbe)
    else:
        print(sbe)

>>> strlist=['梯阅线条','tyxt.work','9555']
>>> target1='梯阅线条';target2='tyxt'
>>> test_searchbyexc(strlist,target1)
在['梯阅线条', 'tyxt.work', '9555']找到'梯阅线条'
>>> test_searchbyexc(strlist,target2)
在['梯阅线条', 'tyxt.work', '9555']未找到'tyxt'

1.3 sys.exc_info获取异常信息

python中空的except捕获任何未被捕获的异常,通过sys.exc_info获取捕获的实际异常。

用法

import sys
sys.exc_info()

描述

返回元组(type,value,traceback),

type:捕获的异常类型;

value:捕获的异常类的实例;

traceback:触发异常的调用堆栈;

示例

>>> try:
    1+[]
except:
    print(sys.exc_info())

    
(<class 'TypeError'>, TypeError("unsupported operand type(s) for +: 'int' and 'list'"), <traceback object at 0x03EFEE40>)

1.4 traceback.print_exc打印异常堆栈

用法

import traceback
try:
    # try 代码块
except xxx:
    # except 代码块
    traceback.print_exc()

描述

当Python程序发生异常时,通过traceback.print_exc()获取异常的详细信息,包括异常类型、异常值和异常发生的位置信息。

(1) 导入 traceback模块;

(2) 在except处理器,调用traceback.print_exc()方法;

示例

>>> import traceback
>>> try:
    1+[]
except:
    traceback.print_exc()

    
Traceback (most recent call last):
  File "<pyshell#79>", line 2, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'list'

 到此这篇关于python获取异常信息exc_info和print_exc的使用的文章就介绍到这了,更多相关python获取异常信息 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅析使用Python操作文件

    浅析使用Python操作文件

    文件操作对编程语言的重要性不用多说,如果数据不能持久保存,信息技术也就失去了意义。按照本人经验,IO也是蛮头疼的一件事,因为不会用得太多,所以总是记不住API,每次都要重新google就会打断思路,还不一定每次都快速得到正确的文章。
    2017-07-07
  • Python第三方库Click快速使用详解

    Python第三方库Click快速使用详解

    这篇文章主要介绍了Python第三方库Click的相关资料,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2024-12-12
  • From CSV to SQLite3 by python 导入csv到sqlite实例

    From CSV to SQLite3 by python 导入csv到sqlite实例

    今天小编就为大家分享一篇From CSV to SQLite3 by python 导入csv到sqlite实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • Python判断文件和文件夹是否存在的方法

    Python判断文件和文件夹是否存在的方法

    这篇文章主要介绍了Python判断文件和文件夹是否存在的方法,本文还讲解了判断是否为文件或者目录的方法、os.path.lexist的作用、FTP中判断文件或目录是否存在等内容,需要的朋友可以参考下
    2015-05-05
  • Python实现批量上传本地maven库到nexus

    Python实现批量上传本地maven库到nexus

    这篇文章主要为大家详细介绍了如何使用Python实现批量上传本地maven库到nexus,文中的示例代码讲解详细,具有一定的借鉴价值,需要的小伙伴可以参考下
    2024-01-01
  • Python入门之面向对象和类

    Python入门之面向对象和类

    这篇文章主要为大家介绍了Python面向对象和类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • python中os库的函数使用

    python中os库的函数使用

    这篇文章主要介绍了python中os库的使用,本篇文章记录下python中os库的一些函数使用,对python os库使用感兴趣的朋友跟随小编一起看看吧
    2022-10-10
  • 基于PyQt5制作数据处理小工具

    基于PyQt5制作数据处理小工具

    这篇文章主要和大家介绍了如何利用Python中的PyQt5模块制作一个数据处理小工具,可以实现根据每个Excel数据文件里面的Sheet批量将数据文件合并成为一个汇总后的Excel数据文件,需要的可以参考一下
    2022-03-03
  • Python PyQt5实战项目之查询器的实现流程详解

    Python PyQt5实战项目之查询器的实现流程详解

    PyQt5以一套Python模块的形式来实现功能。它包含了超过620个类,600个方法和函数。它是一个多平台的工具套件,它可以运行在所有的主流操作系统中,包含Unix,Windows和Mac OS。PyQt5采用双重许可模式。开发者可以在GPL和社区授权之间选择
    2021-11-11
  • Python django中如何使用restful框架

    Python django中如何使用restful框架

    今天给大家带来的是关于Python框架的相关知识,文章围绕着django中restful框架的使用展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06

最新评论