使用Try Except循环写入文件始终触发Except块,求解决建议
问题分析与解决
原代码的问题
- 错误使用
'r'模式打开文件:如果目标文件不存在,open(fname, 'r')会直接抛出FileNotFoundError,这就是测试时持续报错的核心原因。写入文件根本不需要先执行读取操作。 - 未正确管理文件资源:打开文件后未手动关闭,可能导致资源泄漏,Python中推荐用
with语句自动处理文件的打开与关闭。 - 异常捕获过于宽泛:
except:会捕获所有异常,不利于定位具体问题,应该针对文件操作的具体异常类型捕获。
修正后的代码
def write_string(fname, text): try: # 使用with语句自动管理文件上下文,无需手动关闭 with open(fname, 'w') as f: # 写入文本并返回写入的字符数 return f.write(text) # 捕获文件操作常见异常:路径不存在、权限不足、IO错误 except (FileNotFoundError, PermissionError, IOError) as e: print(f'Error occurred when opening/writing {fname}: {str(e)}') return None
代码说明
'w'模式:会自动创建不存在的文件,若文件已存在则覆盖原有内容,满足写入指定文本的需求;如果需要追加内容而非覆盖,可将'w'改为'a'。with语句:代码块执行完毕后自动关闭文件,避免资源占用问题。- 精准捕获异常:只针对文件操作相关的异常捕获,同时打印具体错误信息,便于排查问题。
- 返回值:写入成功时返回实际写入的字符数,异常时返回
None,完全符合需求。
内容的提问来源于stack exchange,提问作者user21665907
相关产品推荐
相关产品推荐

