我想覆盖python的原生open
函数。 这是我尝试过的。我的目录中有以下文件:
main.py
mock.py
test.txt
test_main.py
main.py
包含以下内容:
fs = open('test.txt', 'r')
mock.py
包含以下内容:
def open():
print("hello")
test.txt
包含以下内容:
abc
test_main.py
包含以下内容:
import pathlib
import mock
if __name__=="__main__":
file_path = pathlib.Path('test.txt')
open = mock.open
import main
file_path.unlink()
在第 6 行test_main.py
中,我试图通过设置自己的来覆盖 函数mock.py
关键字open
.test_main.py
之内 看起来Python将使用我的定义。但是,在 导入main.py
看起来 Python 仍然诉诸本机定义,因此python test_main.py
抛出以下错误:
权限错误: [WinError 32] 进程无法访问该文件,因为它正由另一个进程使用:"测试.txt">
我怎样才能重新定义open
以便我的定义适用于所有 导入的命名空间?
多亏了这个问题,我才找到它。需要导入builtins
:
import pathlib
import mock
import builtins
if __name__=="__main__":
file_path = pathlib.Path('test.txt')
builtins.open = mock.open
import main
file_path.unlink()