六、异常处理
-
基本语法
try: # 尝试运行的代码块 result = 10 / 0 except ZeroDivisionError as e: # 捕获 ZeroDivisionError 异常 print("不能除以零!", e) except TypeError as e: print("类型错误!", e) except Exception as e: # 这里可以捕获所有的错误 print("其他错误", e) else: # 如果没有异常发生,执行此代码块 print("没有发生异常,结果是", result) finally: # 无论是否发生异常,都执行此代码块 print("执行完成")
- try:包含可能发生异常的代码。
- except:处理特定的异常类型。如果
except
有一些错误不能捕捉,会直接抛出异常 - else:当没有异常发生时执行的代码。
- finally:无论是否发生异常都会执行,常用于资源清理(如关闭文件)。
-
捕获多个异常
-
可以通过多个
except
块捕获不同的异常类型,也可以在一个except
中捕获多个异常类型。 -
例子
try: result = int("string") # 将字符串转换为整数 except (ValueError, TypeError) as e: print("捕获 ValueError 或 TypeError 异常", e)
-
-
自定义异常
-
Python 允许创建自定义异常,通过继承内置的
Exception
类实现。自定义异常可以提供更详细的错误描述。 -
例子
class CustomError(Exception): """自定义异常类型""" def __init__(self, message): self.message = message try: raise CustomError("这是一个自定义错误") except CustomError as e: print("捕获自定义异常:", e) #捕获自定义异常: 这是一个自定义错误
-
print(e)
的内容取决于什么?取决于构造函数的传参,class CustomError(Exception): """自定义异常类型""" def __init__(self, age, message): self.age = age self.m = message try: raise CustomError(10, "这是一个自定义错误") except CustomError as e: print("捕获自定义异常:", e) # 捕获自定义异常: (10, '这是一个自定义错误')
-
同时也可以用
__str__
和__repr__
来控制输出。class CustomError(Exception): """自定义异常类型""" def __init__(self, age, message): self.age = age self.m = message def __str__(self) -> str: return f"亲,你遇到了一个自定义错误CustomError" try: raise CustomError(10, "这是一个自定义错误") except CustomError as e: print("捕获自定义异常:", e) # 捕获自定义异常: 亲,你遇到了一个自定义错误CustomError
-
-
忽略异常
try: risky_operation() # 可能发生错误的操作 except: pass # 不做任何处理,直接忽略错误