为何exec()报错‘参数必须是字符串、字节或代码对象’?
解决exec()传入文件对象报错的问题
你碰到的这个错误和文件路径完全没关系,核心问题是exec()不接受文件对象作为参数。open()函数返回的是一个文件对象,而exec()要求传入的必须是字符串、字节或者代码对象,所以不管你路径写得对不对,加不加r前缀,都会报这个错。
正确写法
直接读取文件内容后传给exec():
# 基础写法 exec(open('test.txt').read())
更推荐用with语句,能自动关闭文件,避免资源泄漏:
with open('test.txt', 'r', encoding='utf-8') as f: exec(f.read())
如果用Python 3.4+,也可以用pathlib模块更简洁地读取文件:
from pathlib import Path exec(Path('test.txt').read_text(encoding='utf-8'))
为什么之前可能能用?
要是你之前用这种写法成功过,大概率是当时用的是Python 2版本——在Python 2里,文件对象可以直接被exec()处理,但Python 3已经移除了这个特性,必须显式读取文件内容。
确认路径是否正确(可选)
如果还是担心路径问题,可以先验证文件是否存在:
import os print(os.path.exists('test.txt')) # 输出True说明路径没问题
内容的提问来源于stack exchange,提问作者Marlon D. Alessandra
相关产品推荐
相关产品推荐

