在Python编程中,异常处理允许程序在遇到错误或意外情况时,能够正确处理这些问题,而不是直接崩溃,增加了程序的稳定性。
异常(Exception):程序在运行时可以预料到的错误,并且应该被捕获和处理。例如,文件未找到、类型错误等。错误(Error):通常是无法预知且不可恢复的问题,例如内存错误、语法错误等。大多数错误无法通过异常处理机制来修复。常见的内置异常类型Exception:所有内置异常的非系统退出类异常的基类。AttributeError:当属性引用或赋值失败时引发。IOError / OSError:用于处理输入/输出操作的异常。IndexError:当序列中没有此索引时引发。KeyError:当在字典中找不到指定的键时引发。NameError:当找不到变量名时引发。SyntaxError:当代码语法有误时引发。TypeError:当操作或函数应用于不适当类型的对象时引发。ValueError:当操作或函数接收到具有正确类型但值不合适的参数时引发。ZeroDivisionError:当除法或取模运算的第二个参数为零时引发。异常处理机制基本语法
使用try-except结构捕获异常。
try: 可能出错的代码except 异常类型 as 变量: 处理异常的代码try: result = 10 / 0except ZeroDivisionError as e: print("错误:", e) # 输出:错误:division by zero捕获多个异常
try: num = input("请输入一个整数:") result = 10 / numexcept ValueError: print("输入的不是整数!")except ZeroDivisionError: print("除数不能为0!")else和finally
else:在没有异常时执行。finally:无论是否发生异常都会执行。我们一般在这里释放资源,如关闭文件或网络连接。try: result = 10 / 2except ZeroDivisionError: print("除数不能为0!")else: print("计算结果:", result) # 输出:计算结果:5.0finally: print("执行完毕") # 输出:执行完毕抛出异常
使用raise关键字手动抛出异常。
def check_age(age): if age < 0: raise ValueError("年龄不能为负数") return agetry: check_age(-10)except ValueError as e: print("错误:", e) # 输出:错误:年龄不能为负数抛出自定义异常
我们需要继承Exception类来自定义异常。
class MyException(Exception): def __init__(self, message): super().__init__(message)def check_value(x): if x < 0: raise MyException("值不能为负数") return xtry: check_value(-5)except MyException as e: print(e)
Python语言异常处理