面试题答案
一键面试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)
以上代码中:
- 定义了基类
FileHandlingError
,它继承自Exception
,并初始化一个错误信息message
。 FileNotFoundError
和FilePermissionError
继承自FileHandlingError
,分别针对文件不存在和权限不足的情况,它们在初始化时除了调用基类的构造函数外,还保存了文件路径。read_file
函数模拟文件读取操作,根据不同情况抛出对应的自定义异常,并在函数内捕获处理打印错误信息。