鱼C论坛

 找回密码
 立即注册
查看: 1525|回复: 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 参数指定异常输出到哪个文件中。

例如:

  1. import traceback

  2. try:
  3.     num = int(input("请输入一个整数:"))
  4.     print(1 / num)
  5. except Exception:
  6.     print("啊哦,出错了\n")
  7.     traceback.print_exc()
  8.     input()
复制代码


运行结果:

20200219_183807.gif

20200219_184703.gif

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

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

例如:

  1. import traceback

  2. try:
  3.     num = int(input("请输入一个整数:"))
  4.     print(1 / num)
  5. except Exception:
  6.     print("啊哦,出错了\n")
  7.     err = traceback.format_exc()
  8.     print(err + "\n")
  9.     print(err[:15])
  10.     print(err[-15:])
  11.     input()
复制代码


运行结果:

  1. 请输入一个整数:0
  2. 啊哦,出错了

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


  7. Traceback (most
  8. vision by zero
复制代码

  1. 请输入一个整数:1.5
  2. 啊哦,出错了

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


  7. Traceback (most
  8. base 10: '1.5'
复制代码

本帖被以下淘专辑推荐:

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 08:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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