错误与异常处理
错误 (Errors) :是程序中的语法或逻辑问题,例如拼写错误或缺少必要的代码结构。Python 编译阶段会直接报错,无法执行程序。
python 代码解读复制代码if True # 语法错误:缺少冒号
print("Error")
异常 (Exceptions) :是运行时发生的错误,程序在运行时检测到的非预期行为。如果未处理异常,程序会崩溃。
perl 代码解读复制代码print(1 / 0) # ZeroDivisionError
print(int("abc")) # ValueError
常见的 Python 内置异常包括:
- SyntaxError:语法错误。
- ZeroDivisionError:除数为零。
- ValueError:传入无效参数。
- TypeError:类型不匹配。
- IndexError:索引超出范围。
- KeyError:字典中找不到指定键。
- AttributeError:对象没有某个属性。
- NameError:引用未定义的变量。
- FileNotFoundError:文件未找到。
- ImportError:导入模块失败。
异常捕获与处理
try-except
结构
python 代码解读复制代码try:
# 可能会引发异常的代码
except ExceptionType:
# 处理异常的代码
try:
result = 10 / 0
except ZeroDivisionError:
print("除数不能为零!")
捕获多个异常:使用多个 except
分支或者捕获多个异常为一类。
捕获所有异常:不推荐,但在特殊情况下可能使用。
python 代码解读复制代码try:
value = int("abc")
except ValueError:
print("值错误!")
except TypeError:
print("类型错误!")
try:
result = 10 / 0
except (ZeroDivisionError, ValueError) as e:
print(f"异常发生:{e}")
try:
result = 10 / 0
except Exception as e:
print(f"捕获到异常:{e}")
else
和 finally
子句
else
:当 try
块没有发生异常时执行。
python 代码解读复制代码try:
result = 10 / 2
except ZeroDivisionError:
print("除数不能为零!")
else:
print(f"结果是:{result}")
finally
:无论是否发生异常,都会执行的代码块,常用于清理资源。
python 代码解读复制代码try:
f = open("file.txt", "r")
except FileNotFoundError:
print("文件未找到!")
finally:
print("清理操作完成。")
自定义异常
1.定义自定义异常类:需要继承自Exception
类:
ruby 代码解读复制代码class MyError(Exception):
def __init__(self, message):
self.message = message
2.抛出异常:使用 raise
手动引发异常
- 可以指定异常类型和消息
raise ValueError("非法值!")
- 在捕获异常中重新引发
python 代码解读复制代码
try:
raise ValueError("测试异常")
except ValueError:
print("捕获异常后重新引发")
raise
python 代码解读复制代码
def check_value(value):
if value < 0:
raise MyError("值不能为负数!")
try:
check_value(-1)
except MyError as e:
print(f"捕获自定义异常:{e.message}")
常见的异常处理实践
文件操作中的异常处理
python 代码解读复制代码try:
with open("example.txt", "r") as file:
content = file.read()
except FileNotFoundError:
print("文件未找到!")
评论记录:
回复评论: