如何修复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
相关产品推荐
相关产品推荐

