鱼C论坛

 找回密码
 立即注册
查看: 2164|回复: 0

[技术交流] Python 小技巧 067:Python traceback 模块打印异常信息

[复制链接]
发表于 2020-2-20 18:36:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 zltzlt 于 2020-2-20 18:36 编辑

Python traceback 模块打印异常信息


Python 的 traceback 模块为我们提供了追踪异常的借口,用 traceback 模块可以很方便地打印出异常信息,而不用一报错就退出程序。

traceback 常用的两个函数如下:

  • print_exc(limit=None, file=None, chain=True)
  • format_exc(limit=None, chain=True)


其中 print_exc 是直接将异常信息输出到 sys.stderr 中,而 format_exc 返回完整的异常信息。可以通过设置 file 参数指定异常输出到哪个文件中。

例如:
import traceback

try:
    num = int(input("请输入一个整数:"))
    print(1 / num)
except Exception:
    print("啊哦,出错了\n")
    traceback.print_exc()
    input()

运行结果:

20200219_183807.gif

20200219_184703.gif

可以看到在 Python Launcher 中运行时,程序报错时打印完异常信息时并没有直接退出,因为程序后面有句 input() 。

format_exc() 与 print_exc() 稍有不同 ,format_exc() 是返回表示异常信息的字符串,并不会打印。

例如:
import traceback

try:
    num = int(input("请输入一个整数:"))
    print(1 / num)
except Exception:
    print("啊哦,出错了\n")
    err = traceback.format_exc()
    print(err + "\n")
    print(err[:15])
    print(err[-15:])
    input()

运行结果:
请输入一个整数:0
啊哦,出错了

Traceback (most recent call last):
  File "E:/Programming/Python/项目/demo.py", line 6, in <module>
    print(1 / num)
ZeroDivisionError: division by zero


Traceback (most
vision by zero
请输入一个整数:1.5
啊哦,出错了

Traceback (most recent call last):
  File "E:/Programming/Python/项目/demo.py", line 5, in <module>
    num = int(input("请输入一个整数:"))
ValueError: invalid literal for int() with base 10: '1.5'


Traceback (most
base 10: '1.5'

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 14:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表