MST

星途 面试题库

面试题:Python自定义异常类:层次结构与应用

假设你正在开发一个文件处理模块,需要自定义一系列异常类。首先定义一个基类 `FileHandlingError` 继承自 `Exception`。然后,从这个基类派生出两个子类:`FileNotFoundError` 用于文件不存在的情况,`FilePermissionError` 用于文件权限不足的情况。为每个类添加适当的属性和方法,以满足在文件处理操作(如读取文件、写入文件)中遇到这些错误时,能够提供详细的错误信息和处理逻辑。请编写代码示例,展示如何在文件操作函数中抛出这些自定义异常,并在调用处捕获和处理它们。
46.6万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
class FileHandlingError(Exception):
    def __init__(self, message):
        self.message = message
        super().__init__(self.message)

class FileNotFoundError(FileHandlingError):
    def __init__(self, file_path):
        self.file_path = file_path
        message = f"文件 {file_path} 不存在"
        super().__init__(message)

class FilePermissionError(FileHandlingError):
    def __init__(self, file_path):
        self.file_path = file_path
        message = f"对文件 {file_path} 权限不足"
        super().__init__(message)

def read_file(file_path):
    try:
        if not os.path.exists(file_path):
            raise FileNotFoundError(file_path)
        if not os.access(file_path, os.R_OK):
            raise FilePermissionError(file_path)
        with open(file_path, 'r') as f:
            return f.read()
    except (FileNotFoundError, FilePermissionError) as e:
        print(f"发生错误: {e.message}")

file_path = 'test.txt'
read_file(file_path)

以上代码中:

  1. 定义了基类FileHandlingError,它继承自Exception,并初始化一个错误信息message
  2. FileNotFoundErrorFilePermissionError继承自FileHandlingError,分别针对文件不存在和权限不足的情况,它们在初始化时除了调用基类的构造函数外,还保存了文件路径。
  3. read_file函数模拟文件读取操作,根据不同情况抛出对应的自定义异常,并在函数内捕获处理打印错误信息。