MST

星途 面试题库

面试题:Python文件写入错误处理优化

假设你要向一个大文件中持续追加数据,在写入过程中可能会遇到磁盘空间不足等I/O错误。请设计一个函数,要求使用合适的错误处理机制,当遇到错误时进行重试,最多重试3次,每次重试间隔1秒,并记录每次错误信息到另一个日志文件中。
30.6万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
import time


def append_to_file(file_path, data, log_path):
    retry_count = 0
    while retry_count < 3:
        try:
            with open(file_path, 'a') as f:
                f.write(data)
            return True
        except OSError as e:
            retry_count += 1
            error_info = f"Retry {retry_count}: {str(e)} at {time.ctime()}\n"
            with open(log_path, 'a') as log_f:
                log_f.write(error_info)
            time.sleep(1)
    return False

你可以这样调用这个函数:

file_path = 'big_file.txt'
data = "new data to append\n"
log_path = 'error_log.txt'
result = append_to_file(file_path, data, log_path)
if not result:
    print("Failed to append data after 3 retries.")

以上代码实现了向大文件追加数据的功能,在遇到I/O错误时会重试3次,每次间隔1秒,并将每次错误信息记录到日志文件中。具体解释如下:

  1. append_to_file函数接收三个参数:目标文件路径file_path,要追加的数据data,日志文件路径log_path
  2. 使用while循环进行重试,retry_count记录重试次数,最多重试3次。
  3. try块中尝试打开文件并追加数据。如果成功,返回True
  4. 如果发生OSError(包含磁盘空间不足等I/O错误),在except块中记录错误信息到日志文件,并等待1秒后进行下一次重试。
  5. 如果3次重试都失败,返回False
  6. 调用示例展示了如何调用该函数,并在最终失败时给出提示。

请注意,上述代码是Python语言实现,不同编程语言实现细节会有所不同,但整体思路类似。