共计 1019 个字符,预计需要花费 3 分钟才能阅读完成。
在编程过程中,错误和异常是难以避免的。Python 提供了异常处理机制,可以在错误发生时捕获并进行相应处理,避免程序直接崩溃。
- 什么是异常
异常是程序运行过程中出现的错误,比如:
- 除以零:
ZeroDivisionError - 文件不存在:
FileNotFoundError - 类型不匹配:
TypeError
如果不处理异常,程序会直接中断。
- 基本的 try-except
try:
num = int("abc")
except ValueError:
print(" 输入的内容无法转换为数字 ")
try 块中的代码可能出错,若发生 ValueError,程序不会崩溃,而是执行 except 中的内容。
- 捕获多个异常
try:
result = 10 / 0
except ZeroDivisionError:
print(" 不能除以零 ")
except ValueError:
print(" 数值错误 ")
可以根据不同错误类型编写不同的处理方式。
- 捕获所有异常
try:
f = open("nofile.txt")
except Exception as e:
print(" 发生错误:", e)
使用 Exception 可以捕获所有异常,并输出错误信息。
- finally 子句
无论是否发生异常,finally中的代码都会执行,常用于释放资源:
try:
f = open("data.txt")
content = f.read()
except FileNotFoundError:
print(" 文件不存在 ")
finally:
print(" 关闭文件 ")
f.close()
- else 子句
如果try块没有异常发生,可以执行else块:
try:
num = int("123")
except ValueError:
print(" 输入有误 ")
else:
print(" 转换成功:", num)
- 自定义异常
可以通过raise抛出异常:
def check_age(age):
if age < 0:
raise ValueError(" 年龄不能为负数 ")
else:
print(" 年龄合法 ")
check_age(-5)
总结:
异常处理机制能提高程序的健壮性。常见的结构是 try-except-finally,在关键位置捕获错误,保证程序即使出现问题也能安全退出。
练习与思考:
- 编写一个程序,要求用户输入两个数并相除,处理可能出现的除零和输入错误。
- 实现一个函数,判断输入的文件名是否存在,如果不存在则提示错误,否则读取内容。
- 编写一个自定义异常类,用于判断分数是否在 0 到 100 之间,超出范围时抛出异常。
正文完