python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > python获取异常信息

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

作者:梯阅线条

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获取异常信息 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文