发布时间:2026-08-10 16:39:11
Python中处理异常的核心目标是避免程序因运行时错误直接崩溃,通过预设逻辑捕获并处理意外情况,保障程序稳定运行。以下是完整的处理方法:
FileNotFoundError:尝试打开不存在的文件时触发。
ZeroDivisionError:执行除以0的非法数学运算时触发。
TypeError:操作的数据类型不匹配时触发,比如数字和字符串直接相加。
NameError:使用未声明、未定义的变量时触发。
IndexError:列表/元组取值时索引超出合法范围触发。
KeyError:字典取值时访问不存在的键触发。
所有Python内置异常都继承自Exception基类。
基础try-except结构
把可能触发异常的代码放入try块,对应异常的处理逻辑放入except块:
pythontry:
result = 1 / 0except ZeroDivisionError: print("除数不能为0,已自动处理")执行try块代码时如果触发指定异常,程序不会崩溃,直接跳转到对应except块执行处理逻辑。
多异常精准捕获
可以定义多个except块,分别处理不同类型的异常,实现差异化处理:
pythontry:
num = int(input("请输入数字:"))
res = 10 / numexcept ValueError: print("输入内容不是合法数字")except ZeroDivisionError: print("输入的数字不能为0")也可以用元组形式在单个except中同时指定多种异常:
pythonexcept (ValueError, ZeroDivisionError): print("输入内容不合法")捕获所有异常
不指定具体异常类型的except块可以捕获所有继承自Exception的异常,适合不确定具体异常类型的场景:
pythontry: # 可能触发任意异常的代码
passexcept: print("程序出现未知异常,已自动处理")else子句:仅当try块内代码完全没有触发任何异常时,才会执行else块的代码:
pythontry:
num = int(input("请输入数字:"))except ValueError: print("输入非法")else: print(f"输入的数字是{num},没有异常")finally子句:无论try块是否触发异常、except是否执行,finally块的代码一定会执行,常用于资源清理场景:
pythontry:
f = open("test.txt", "r")
content = f.read()except FileNotFoundError: print("文件不存在")finally:
f.close() # 无论文件是否成功读取,都确保关闭文件释放资源优先精准捕获具体异常类型,避免直接使用裸except,防止意外掩盖程序的严重错误。
不要在except块中写空逻辑,至少要打印错误日志或给出用户友好提示,方便后续定位问题。
不要用异常处理替代常规的条件判断,比如提前判断除数不为0,比单纯依赖捕获ZeroDivisionError更符合代码逻辑。
在线客服
您好,需要客服帮助吗?