本文目录导读:

在Python中捕获程序异常主要使用try-except语句,以下是一些常见的异常捕获案例:
基础异常捕获
try:
# 可能出错的代码
num = int(input("请输入一个数字: "))
result = 10 / num
print(f"结果是: {result}")
except ZeroDivisionError:
print("错误:不能除以0!")
except ValueError:
print("错误:请输入有效的数字!")
except Exception as e:
print(f"其他错误: {e}")
捕获多个异常
try:
data = [1, 2, 3]
index = int(input("请输入索引: "))
print(data[index])
except (IndexError, ValueError) as e:
print(f"索引或输入错误: {e}")
使用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()
自定义异常
class AgeError(Exception):
"""自定义年龄异常"""
def __init__(self, age, message="年龄必须大于0"):
self.age = age
self.message = message
super().__init__(self.message)
def check_age(age):
if age < 0:
raise AgeError(age)
elif age > 150:
raise AgeError(age, "年龄不能超过150岁")
return f"年龄: {age}"
try:
result = check_age(-5)
print(result)
except AgeError as e:
print(f"异常: {e.message}, 年龄: {e.age}")
实际应用案例 - 处理网络请求
import requests
from requests.exceptions import RequestException, Timeout
def fetch_data(url):
try:
response = requests.get(url, timeout=5)
response.raise_for_status() # 检查HTTP状态码
return response.json()
except Timeout:
print("请求超时")
return None
except RequestException as e:
print(f"请求失败: {e}")
return None
except ValueError as e:
print(f"JSON解析失败: {e}")
return None
# 使用示例
try:
data = fetch_data("https://api.example.com/data")
if data:
print("数据获取成功")
except Exception as e:
print(f"未知错误: {e}")
断言异常处理
def divide(a, b):
assert b != 0, "除数不能为0"
return a / b
try:
result = divide(10, 0)
except AssertionError as e:
print(f"断言错误: {e}")
嵌套异常处理
try:
try:
num = int(input("请输入数字: "))
result = 100 / num
except ValueError:
print("输入不是有效数字")
raise # 重新抛出异常
except ZeroDivisionError:
print("不能除以0")
raise
except Exception as e:
print(f"外部捕获到异常: {e}")
最佳实践建议
- 尽量捕获具体异常,避免使用裸
except: - 不要忽略异常,至少记录日志
- 在合适的位置捕获,不要包装所有代码
- 使用finally清理资源,如关闭文件、数据库连接
# 推荐的做法
try:
with open("file.txt", "r") as f:
content = f.read()
except FileNotFoundError:
print("文件不存在")
except PermissionError:
print("没有读取权限")
finally:
# 使用with语句自动管理资源,不需要手动关闭
pass
掌握这些异常处理技巧,可以让你的Python程序更加健壮和可靠。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播