基本语法
基础结构
try:
# 可能会出错的代码
result = 10 / 0
except:
# 出错时的处理
print("出错了!")
更完整的结构
try:
# 尝试执行的代码
num = int(input("请输入一个数字:"))
result = 10 / num
except ZeroDivisionError:
# 处理除零错误
print("不能除以0!")
except ValueError:
# 处理值错误(比如输入的不是数字)
print("请输入有效的数字!")
except Exception as e:
# 处理其他所有异常
print(f"发生了未知错误:{e}")
else:
# 如果没有异常发生,执行这里
print(f"计算结果:{result}")
finally:
# 无论是否发生异常,都会执行
print("程序执行完毕")
常见异常类型
-
- ZeroDivisionError - 除零错误
-
- ValueError - 值错误
-
- TypeError - 类型错误
-
- IndexError - 索引错误
-
- KeyError - 键错误
-
- FileNotFoundError - 文件找不到错误
实际例子
例1:处理除零错误
try:
x = 10
y = 0
result = x / y
except ZeroDivisionError:
print("除数不能为零!")
例2:处理文件操作
try:
file = open("不存在的文件.txt", "r")
content = file.read()
except FileNotFoundError:
print("文件不存在!")
finally:
try:
file.close() # 尝试关闭文件
except:
pass # 如果文件没打开,忽略错误
例3:处理用户输入
while True:
try:
age = int(input("请输入你的年龄:"))
if age <= 0:
print("年龄必须大于0!")
continue
break
except ValueError:
print("请输入有效的数字!")
最佳实践建议
- 不要滥用:不要用 try-except 替代正常的条件判断
# 不好:
try:
value = my_dict[key]
except KeyError:
value = None
# 更好:
value = my_dict.get(key) # 使用 get 方法
- 具体化异常:尽量捕获具体的异常,而不是用 except:捕获所有
- 记录错误:在生产环境中,应该记录错误信息
- 资源清理:使用 finally 或 with 语句确保资源被释放
简单总结
- try:尝试执行可能会出错的代码
- except:捕获并处理特定的异常
- else:没有异常时执行
- finally:无论是否异常都会执行