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

如何修复Python文件操作时出现的TypeError: expected str, bytes or os.PathLike object, not function报错

报错原因定位

你遇到的TypeError由两个叠加的问题导致:

  • 首先是命名冲突:你定义的函数名和内部存储文件名的变量名都是file_name,Python解析标识符时会出现指代混淆
  • 其次是作用域问题:函数内部定义的file_name是局部变量,函数外部无法直接访问,你在函数外执行open(file_name, 'wt')时,此处的file_name实际指向你定义的同名函数对象,而非用户输入的文件名字符串,因此open()接收到不符合要求的参数类型,触发报错。

修复方案

方案1:拆分功能,函数返回文件名后外部调用

修改函数名避免命名冲突,同时将用户输入的文件名作为返回值传出,外部调用函数拿到字符串类型的文件名后再执行写文件操作:

# 修改函数名避免和后续变量冲突
def get_input_filename():
    return input('Enter file name you want to save it: ')

# 提前定义要保存的文本内容
strings = "需要保存的指定文本"
# 调用函数获取文件名,赋值给变量
file_name = get_input_filename()
file = open(file_name, 'wt')
file.write(strings)
file.close()

方案2:把写文件逻辑全部封装到函数内部

如果不需要拆分功能,直接将文件写入的步骤放到函数内,避免局部变量无法外部访问的问题:

def save_text_to_file(strings):
    file_name = input('Enter file name you want to save it: ')
    file = open(file_name, 'wt')
    file.write(strings)
    file.close()

# 直接调用函数传入要保存的内容即可
save_text_to_file("需要保存的指定文本")

优化建议:实际开发中更推荐使用with上下文管理器操作文件,无需手动调用close(),就算运行过程中出现异常也会自动关闭文件,避免文件句柄泄漏:

with open(file_name, 'wt', encoding='utf-8') as f:
    f.write(strings)

内容的提问来源于stack exchange,提问作者PDoudna

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 17:45:01