python中文件和异常处理方法(二)
一.综合示例:文件操作和异常处理
下面是一个综合示例,它展示了如何在处理文件时捕获和处理异常。
python复制代码
|
def read_file(filename): |
|
try: |
|
# 尝试打开文件并读取内容 |
|
with open(filename, 'r') as file: |
|
return file.read() |
|
except FileNotFoundError: |
|
# 如果文件不存在,则打印错误消息并返回 None |
|
print(f'The file {filename} does not exist.') |
|
return None |
|
except Exception as e: |
|
# 如果发生其他异常,则打印错误消息并返回 None |
|
print(f'An error occurred while reading the file: {e}') |
|
return None |
|
|
|
# 调用函数并处理返回的结果 |
|
content = read_file('nonexistent_file.txt') |
|
if content is not None: |
|
print(content) |
|
else: |
|
print('Failed to read the file.') |
这个示例中的read_file()函数尝试打开并读取指定的文件。如果文件不存在,它会捕获FileNotFoundError异常并打印错误消息。如果发生其他类型的异常(如权限问题或磁盘错误),它会捕获Exception基类异常并打印错误消息。无论是否发生异常,函数都会返回一个值(文件内容或None),调用者可以检查这个值来确定操作是否成功。
二.自定义异常
在Python中,除了处理内置异常外,你还可以定义自己的异常类。这在你需要为特定情况创建特定错误消息时非常有用。
1.定义自定义异常类
python复制代码
|
class CustomError(Exception): |
|
def __init__(self, message): |
|
self.message = message |
|
|
|
def __str__(self): |
|
return f'CustomError: {self.message}' |
2.引发并使用自定义异常
python复制代码
|
def divide_numbers(a, b): |
|
if b == 0: |
|
raise CustomError('Division by zero is not allowed.') |
|
else: |
|
return a / b |
|
|
|
try: |
|
result = divide_numbers(10, 0) |
|
except CustomError as e: |
|
print(e) |
在这个例子中,我们定义了一个CustomError类,它继承自内置的Exception类。当divide_numbers函数中的除数为0时,我们引发CustomError异常,并传递一个自定义的错误消息。在try块中,我们调用divide_numbers函数,并在except块中捕获CustomError异常,打印出异常消息。