Ubuntu 下 Python 异常处理与排查指南
一 基本语法与执行方式
示例
try:
x = int(input("请输入整数: "))
result = 10 / x
except ValueError:
print("输入不是整数")
except ZeroDivisionError:
print("除数不能为 0")
else:
print(f"结果是: {result}")
finally:
print("处理结束")
要点
二 常见场景与处理建议
示例 文件与网络
# 文件
import logging
logging.basicConfig(level=logging.ERROR)
try:
with open("data.txt", "r") as f:
content = f.read()
except FileNotFoundError:
logging.error("文件未找到")
except PermissionError:
logging.error("无权限读取文件")
# 网络
import requests
try:
r = requests.get("https://example.com", timeout=5)
r.raise_for_status()
except requests.exceptions.HTTPError as e:
logging.error(f"HTTP 错误: {e}")
except requests.exceptions.ConnectionError:
logging.error("连接失败")
except requests.exceptions.Timeout:
logging.error("请求超时")
except requests.exceptions.RequestException as e:
logging.error(f"请求异常: {e}")
要点
三 调试与日志记录
示例
import logging, pdb
logging.basicConfig(level=logging.ERROR)
def compute(a, b):
try:
return a / b
except ZeroDivisionError as e:
logging.error("计算失败: 除数不能为 0 (a=%s, b=%s)", a, b)
raise # 继续向上抛出
# 需要时断点调试
# pdb.set_trace()
要点
四 自定义异常与最佳实践
示例 自定义异常
class NegativeValueError(Exception):
"""值不能为负数"""
def __init__(self, value):
super().__init__(f"值不能为负数: {value}")
self.value = value
def check_value(v):
if v < 0:
raise NegativeValueError(v)
try:
check_value(-1)
except NegativeValueError as e:
print(e)
要点