本文共 2699 字,大约阅读时间需要 8 分钟。
在Python编程中,异常是程序运行时可能遇到的错误事件,它会中断程序的正常执行流程。通过对异常的处理,可以使程序在遇到错误时能够采取适当措施,从而避免程序崩溃。
在编写Python代码时,错误主要分为两类:语法错误和异常错误。
语法错误:这是由于代码不符合Python语法规范导致的错误,例如代码格式错误、缩进错误等。这些错误会阻止程序正常执行。
异常错误:即使代码语法正确,程序在执行过程中也可能遇到错误。常见的异常错误包括:
通过捕获这些异常,可以让程序在遇到错误时继续执行,而不是崩溃。
使用try和except语句可以捕获异常。try块包裹可能出错的代码,except块用于处理异常。
示例:
try: f = open('linux.txt', 'r')except: f = open('linux.txt', 'w') 可以通过指定异常类型来捕获特定的错误。
示例:
try: print(name)except NameError as e: print('name变量名称未定义错误') 注意事项:
except中的异常类型一致。try内通常只放一行可能出错的代码。可以将多个异常类型列出,使用元组表示。
示例:
try: print(1/0)except (NameError, ZeroDivisionError) as e: print(e)
结果示意图:
Traceback (most recent call last): File "", line 2, in ZeroDivisionError: division by zero
可以使用Exception作为通用异常捕获所有异常。
示例:
try: print(name)except Exception as e: print(e)
else块用于在try块未发生异常时执行。finally块用于在try或except块完成后执行,总是会执行。示例:
try: f = open('test.txt', 'r')except Exception as e: f = open('test.txt', 'w')else: print('没有异常,真开心')finally: f.close() 可以使用raise语句手动抛出异常。
示例:
def divide(x, y): if y == 0: raise ValueError("y cannot be zero") return x / ydivide(4, 2)divide(3, 0) 结果示意图:
Traceback (most recent call last): File "", line 6, in divide File " ", line 2, in divideValueError: y cannot be zero
有时标准异常不足以描述特定错误,可以自定义异常类。
示例:
class CustomError(Exception): """自定义异常类""" def __init__(self, message): self.message = message def __str__(self): return f"CustomError: {self.message}"try: raise CustomError("This is a custom error")except CustomError as ce: print(ce) 结果示意图:
CustomError: This is a custom error
在函数中未处理的异常会向上传递,直到被捕获或程序终止。
示例:
class CustomError(Exception): """自定义异常类""" def __init__(self, message): self.message = message def __str__(self): return f"CustomError: {self.message}"def read_file(file_path): try: with open(file_path, 'r') as file: return file.read() except FileNotFoundError as e: raise CustomError(f"File not found: {file_path}") from edef process_file(file_path): try: content = read_file(file_path) # 假设这里有其他处理文件内容的代码 return content except CustomError as ce: print(ce)try: file_content = process_file("non_existent_file.txt")except CustomError as ce: print(f"Handled at top level: {ce}") 转载地址:http://daofk.baihongyu.com/