本文目录导读:

我来给你展示Python中try-except捕获异常的常用案例:
基础异常捕获
# 基础用法
try:
number = int(input("请输入一个数字: "))
result = 10 / number
print(f"10 ÷ {number} = {result}")
except ValueError:
print("错误:请输入有效的数字!")
except ZeroDivisionError:
print("错误:除数不能为0!")
捕获多个异常
# 捕获多种异常类型
try:
data = [1, 2, 3]
index = int(input("请输入索引: "))
print(f"元素值为: {data[index]}")
except (ValueError, IndexError) as e:
print(f"发生错误: {e}")
使用else和finally
# else - 没有异常时执行
# finally - 无论是否异常都执行
try:
file = open("test.txt", "r")
content = file.read()
except FileNotFoundError:
print("文件不存在!")
else:
print("文件读取成功")
print(content)
finally:
print("程序执行完毕")
if 'file' in locals():
file.close()
获取异常信息
# 获取异常详细信息
try:
x = 1 / 0
except Exception as e:
print(f"异常类型: {type(e).__name__}")
print(f"异常信息: {str(e)}")
print(f"详细描述: {repr(e)}")
自定义异常
# 自定义异常类
class CustomError(Exception):
def __init__(self, message):
self.message = message
super().__init__(self.message)
try:
age = int(input("请输入年龄: "))
if age < 0 or age > 150:
raise CustomError("年龄超出有效范围!")
print(f"年龄: {age}")
except CustomError as e:
print(f"自定义错误: {e}")
except ValueError:
print("请输入有效的数字!")
实际应用案例
def safe_divide():
"""安全的除法运算"""
try:
a = float(input("被除数: "))
b = float(input("除数: "))
result = a / b
except ValueError:
print("❌ 输入必须是数字!")
return None
except ZeroDivisionError:
print("❌ 除数不能为0!")
return None
except Exception as e:
print(f"❌ 未知错误: {e}")
return None
else:
print(f"✅ 计算结果: {result}")
return result
finally:
print("--- 本次运算结束 ---")
# 调用函数
safe_divide()
文件操作异常处理
def read_config(filename):
"""读取配置文件"""
try:
with open(filename, 'r', encoding='utf-8') as f:
config = f.read()
return config
except FileNotFoundError:
print(f"❌ 配置文件 {filename} 不存在")
return None
except PermissionError:
print(f"❌ 没有权限读取文件 {filename}")
return None
except UnicodeDecodeError:
print(f"❌ 文件编码格式不正确")
return None
except Exception as e:
print(f"❌ 读取文件时发生错误: {e}")
return None
# 测试
config = read_config("config.txt")
异常捕获最佳实践
# ✅ 好的做法:具体异常类型
try:
# 代码
pass
except ValueError:
# 处理特定异常
pass
# ❌ 不好的做法:捕获所有异常
try:
# 代码
pass
except: # 不推荐
# 隐藏了所有错误
pass
# ✅ 更好的做法:记录日志
import logging
try:
# 可能出错的代码
pass
except Exception as e:
logging.error(f"发生错误: {e}", exc_info=True)
# 或者重新抛出
raise
这些案例涵盖了Python异常处理的主要场景,根据具体需求选择合适的方式即可。