python中try和except的用法
Python中try和except的用法
try和except是Python中用于异常处理的关键结构,允许程序在遇到错误时优雅地处理,而不是直接崩溃。
基本语法
try:
# 可能引发异常的代码
risky_operation()
except ExceptionType:
# 处理特定类型的异常
handle_exception()
常见用法示例
1. 基本异常捕获
try:
num = int(input("请输入一个数字: "))
result = 10 / num
print(f"结果是: {result}")
except ValueError:
print("错误:请输入有效的数字!")
except ZeroDivisionError:
print("错误:不能除以零!")
2. 捕获多个异常
try:
# 可能引发多种异常的代码
file = open("data.txt", "r")
content = file.read()
number = int(content)
except (FileNotFoundError, PermissionError):
print("文件无法打开或不存在")
except ValueError:
print("文件内容不是有效的数字")
3. 捕获所有异常
try:
# 可能引发异常的代码
risky_function()
except Exception as e:
print(f"发生错误: {e}")
# 记录日志或其他处理
4. 完整的try-except结构
try:
# 尝试执行的代码
file = open("example.txt", "r")
data = file.read()
number = int(data.strip())
except FileNotFoundError:
print("文件未找到")
except ValueError:
print("文件内容不是有效数字")
else:
# 如果没有发生异常,执行这里的代码
print(f"成功读取数字: {number}")
finally:
# 无论是否发生异常,都会执行
if 'file' in locals():
file.close()
print("清理完成")
5. 自定义异常处理
class CustomError(Exception):
pass
def validate_age(age):
if age < 0:
raise ValueError("年龄不能为负数")
if age > 150:
raise CustomError("年龄不合理")
try:
validate_age(200)
except ValueError as e:
print(f"输入错误: {e}")
except CustomError as e:
print(f"自定义错误: {e}")
6. 在实际应用中的使用
def safe_divide(a, b):
try:
result = a / b
except ZeroDivisionError:
print("除数不能为零")
return None
except TypeError:
print("请输入数字")
return None
else:
return result
# 使用示例
print(safe_divide(10, 2)) # 输出: 5.0
print(safe_divide(10, 0)) # 输出: 除数不能为零 None
最佳实践
- 具体化异常类型:尽量捕获具体的异常,而不是通用的Exception
- 避免空的except块:至少要记录或处理异常
- 合理使用finally:用于清理资源(如关闭文件、数据库连接)
- 不要过度使用:只在不影响程序逻辑的预期异常处使用
常见异常类型
ValueError:值错误TypeError:类型错误IndexError:索引错误KeyError:字典键错误FileNotFoundError:文件未找到ZeroDivisionError:除零错误
使用try-except可以使程序更加健壮,提高用户体验。
浙公网安备 33010602011771号