You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行文件备份时遇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。

修正方案

  1. 不要用参数名作为打开文件后的变量名,换个比如f或者out_file
  2. 推荐用with语句管理文件,自动关闭文件句柄,更安全可靠
  3. 顺便修正原代码里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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 01:35:12