文章目录
python中是
try except相当于java的 try catch。
通用结构
python
from loguru import logger
try:
# 可能引发异常的代码
result = 10 / 0
except ZeroDivisionError:
# 仅当发生 ZeroDivisionError 时执行
logger.info("不能除以零!")
finally:
logger.info("finally逻辑执行!")
打印异常有几种方案
1、traceback模块
2、sys模块
3、logging模块,略
4、loguru模块
打印异常-traceback模块
1、用traceback打印
python
try:
# 可能引发异常的代码
result = 10 / 0
except Exception as e:
traceback.print_exc()
2、
打印异常-traceback
打印异常-sys模块
python
import sys
try:
result = 10 / 0
except Exception as e:
# 获取异常三元组(类型、实例、堆栈)
exc_type, exc_value, exc_tb = sys.exc_info()
# 打印自定义格式的堆栈
print(f"异常类型:{exc_type.__name__},描述:{exc_value}")
打印异常-loguru模块
python
try:
result = 10 / 0
except Exception as e:
logger.error(f"转换失败:{e}") # 基础打印
logger.exception("转换失败(带堆栈)") # 自动附加堆栈
exception()方法自带堆栈,推荐用这个。
异常需要as吗?
可以用as,也可以不用,因为获取异常有多种手段。
raise抛出异常
相当于java的throw。
python
try:
if(1<2):
raise Exception("计算错误")
except Exception as e:
logger.exception("出现异常=") # 自动附加堆栈
pass忽略异常
相当于java的catch块中不做任何处理。
注:无论是在java中还是在python中,都非常不推荐忽略异常,很难排查问题,至少也要加上异常日志。
常见的异常类型
| 异常类型 | 描述 |
|---|---|
Exception |
所有内置非系统退出异常的基类(通常捕获这个即可覆盖大部分情况,但不推荐作为首选,除非你需要捕获所有未知错误)。 |
AttributeError |
访问不存在的对象属性。 |
IOError / OSError |
输入/输出操作失败(如文件不存在)。 |
ImportError |
导入模块失败。 |
IndexError |
序列索引超出范围。 |
KeyError |
字典中找不到指定的键。 |
KeyboardInterrupt |
用户中断程序(通常是 Ctrl+C)。 |
NameError |
使用了未定义的变量名。 |
SyntaxError |
代码语法错误(通常在解析阶段,try-except 无法捕获)。 |
TypeError |
操作应用于不适当类型的对象。 |
ValueError |
传入正确的类型但值不合适(如 int("abc"))。 |
ZeroDivisionError |
除数或模数为零。 |