Python中打印异常的方法

Python中打印异常的方法

技术背景

在Python编程中,异常处理是一个重要的部分。当程序运行过程中出现错误时,我们需要捕获并打印异常信息,以便调试和定位问题。不同版本的Python在打印异常方面有一些差异,同时也有多种方法可以实现打印异常的功能。

实现步骤

不同Python版本的基本打印方法

  • Python 2.6及以后和Python 3.x
1
2
3
4
try:
1/0
except Exception as e:
print(e)
PYTHON
  • Python 2.5及更早版本
1
2
3
4
try:
1/0
except Exception, e:
print str(e)
PYTHON

使用traceback模块

traceback模块可以格式化和打印异常及其回溯信息。

1
2
3
4
5
6
import traceback

try:
1/0
except Exception:
traceback.print_exc()
PYTHON

使用logging模块

logging模块比基本的print()函数更灵活,可以将异常信息记录到文件中,还能添加时间戳等额外信息。

1
2
3
4
5
6
import logging

try:
1/0
except BaseException:
logging.exception("An exception was thrown!")
PYTHON

不同日志级别记录异常

可以使用不同的日志级别记录异常,并通过exc_info=True显示异常详情。

1
2
3
4
5
6
7
8
logging.critical("An exception was thrown!", exc_info=True)
logging.error("An exception was thrown!", exc_info=True)
logging.warning("An exception was thrown!", exc_info=True)
logging.info("An exception was thrown!", exc_info=True)
logging.debug("An exception was thrown!", exc_info=True)

# 通用形式
logging.log(level, "An exception was thrown!", exc_info=True)
PYTHON

仅打印异常名称和描述

如果只需要异常的名称和描述信息,可以这样使用logging模块。

1
2
3
4
5
try:
1/0
except BaseException as exception:
logging.warning(f"Exception Name: {type(exception).__name__}")
logging.warning(f"Exception Desc: {exception}")
PYTHON

包含额外信息的单行打印

1
2
3
4
try:
1/0
except Exception as e:
print(f"{type(e).__name__} at line {e.__traceback__.tb_lineno} of {__file__}: {e}")
PYTHON

将异常信息打印到STDERR

1
2
3
4
5
import sys
try:
1/0
except Exception as e:
print(e, file=sys.stderr)
PYTHON

传递错误字符串

1
2
3
4
5
6
7
8
9
try:
raise Exception('spam', 'eggs')
except Exception as inst:
print(type(inst)) # 异常实例
print(inst.args) # 存储在.args中的参数
print(inst) # __str__允许直接打印参数
x, y = inst # __getitem__允许直接解包参数
print('x =', x)
print('y =', y)
PYTHON

仅打印错误名称和消息

1
2
3
4
5
6
try:
with open("not_existing_file.txt", 'r') as text:
pass
except Exception as exception:
print("Exception: {}".format(type(exception).__name__))
print("Exception message: {}".format(exception))
PYTHON

使用assert语句进行单行错误抛出

1
2
A = 1
assert type(A) is type(""), "requires a string"
PYTHON

核心代码

使用logging模块记录异常

1
2
3
4
5
6
import logging

try:
1/0
except BaseException:
logging.exception("An exception was thrown!")
PYTHON

使用traceback模块打印异常回溯

1
2
3
4
5
6
import traceback

try:
1/0
except Exception:
traceback.print_exc()
PYTHON

最佳实践

  • 使用logging模块:在生产环境中,使用logging模块记录异常信息比简单的print语句更合适,它可以提供更多的控制和功能。
  • 将异常信息打印到STDERR:使用print(e, file=sys.stderr)将错误信息输出到标准错误流,方便后续处理和分析。
  • 捕获特定异常:尽量捕获特定的异常类型,而不是使用通用的Exception,这样可以更精确地处理问题。

常见问题

  • logging.exception()只能在异常处理程序中调用:如果在其他地方调用logging.exception(),会导致错误。
  • 避免在日志处理程序中使用logging模块:在日志处理程序中使用logging模块可能会导致RecursionError
  • 不同Python版本的语法差异:要注意不同Python版本在异常处理语法上的差异,确保代码的兼容性。

Python中打印异常的方法
https://119291.xyz/posts/python-exception-printing-methods/
作者
ww
发布于
2025年6月18日
许可协议