执行文件备份时遇OSError: [Errno 22]无效参数,是否因重复文件导致?
问题分析与解决
这个错误不是重复文件导致的,核心问题是你在函数里把文件名变量覆盖成了文件对象,导致生成了无效的文件路径。
看错误信息里的路径:"PythonVocabulary/backup/<_io.BufferedWriter name='PythonVocabulary/german.vcblr'>",这里的<_io.BufferedWriter...>是文件对象转成字符串的结果,说明第二次拼接路径时用的不是原本的文件名,而是已经被覆盖的文件对象。
具体原因
在write_file函数中,你用参数名file接收文件名,但第一行代码file = open(f"PythonVocabulary/{file}", "wb")把这个变量覆盖成了BufferedWriter类型的文件对象。当你第二次执行file = open(f"PythonVocabulary/backup/{file}", "wb")时,{file}会把文件对象转成字符串,就出现了那种奇怪的无效路径,最终触发OSError。
修正方案
- 不要用参数名作为打开文件后的变量名,换个比如
f或者out_file - 推荐用
with语句管理文件,自动关闭文件句柄,更安全可靠 - 顺便修正原代码里
input语句的语法错误,加上退出判断
修正后的代码:
import pickle def write_file(filename, content) -> None: # 写入主文件 with open(f"PythonVocabulary/{filename}", "wb") as f: pickle.dump(content, f) # 写入备份文件 with open(f"PythonVocabulary/backup/{filename}", "wb") as f: pickle.dump(content, f) name = input("Enter the name: (\"/\" to quit)\n>>>") if name == "/": exit() name += ".vcblr" write_file(name, ([], [], [], []))
内容的提问来源于stack exchange,提问作者BrinyFlyer28795
相关产品推荐
相关产品推荐

