面试题答案
一键面试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秒,并将每次错误信息记录到日志文件中。具体解释如下:
append_to_file
函数接收三个参数:目标文件路径file_path
,要追加的数据data
,日志文件路径log_path
。- 使用
while
循环进行重试,retry_count
记录重试次数,最多重试3次。 - 在
try
块中尝试打开文件并追加数据。如果成功,返回True
。 - 如果发生
OSError
(包含磁盘空间不足等I/O错误),在except
块中记录错误信息到日志文件,并等待1秒后进行下一次重试。 - 如果3次重试都失败,返回
False
。 - 调用示例展示了如何调用该函数,并在最终失败时给出提示。
请注意,上述代码是Python语言实现,不同编程语言实现细节会有所不同,但整体思路类似。