gpt4 book ai didi

python - imp.reload - NoneType 对象没有属性 'name'

转载 作者:太空狗 更新时间:2023-10-29 18:06:33 25 4
gpt4 key购买 nike

以下代码:

def _IMPORT_(path)
path = abspath(path)
namespace = path[len(getcwd())+1:].replace('/', '_').strip('\\/;,. ')
print(path)
print(namespace)
loader = importlib.machinery.SourceFileLoader(namespace, path+'.py')
handle = loader.load_module(namespace)
print(handle)
importlib.reload(handle)
return handle

产生:

/home/torxed/git/test/unitest/unix
unitest_unix
<module 'unitest_unix' from '/home/torxed/git/test/unitest/unix.py'>

Traceback (most recent call last):
File "network.py", line 17, in <module>
handle = sock()
File "network.py", line 9, in __init__
sock = _IMPORT_('./unix')
File "/home/torxed/git/test/unitest/helpers.py", line 13, in _IMPORT_
imp.reload(handle)
File "/usr/lib/python3.4/imp.py", line 315, in reload
return importlib.reload(module)
File "/usr/lib/python3.4/importlib/__init__.py", line 149, in reload
methods.exec(module)
File "<frozen importlib._bootstrap>", line 1134, in exec
AttributeError: 'NoneType' object has no attribute 'name'

这在引入此类操作的 Python 3.3.5 中完美运行(在此之前有一些类似的导入机制)。但是在 Python 3.4.2 上这显然不起作用。

自 3.3.5 以来发生了什么变化?找不到它的任何痕迹,或者更改是在版本中间的某个地方。去年有一个针对这种确切行为的补丁,其中环境变量没有传递下来,但似乎在这里起作用。

最佳答案

当我尝试在切换文件夹后重新加载文件时遇到同样的错误。

例如:


创建一个简单的模块:

In [10]: %%file temp.py
...: message = "Hello World!"
...:
Writing temp.py

加载模块并打印一条消息:

In [14]: import temp
...: print(temp.message)
Hello World!

更改消息:

In [17]: temp.message = 'Hello brave new world!'
...: print(temp.message)
Hello brave new world!

重新加载模块以取回原始消息:

In [18]: import imp
...: imp.reload(temp)
...: print(temp.message)
Hello World!

到目前为止一切都很好......


现在改变路径:

In [20]: cd ..

尝试重新加载模块:

In [24]: imp.reload(temp)
Traceback (most recent call last):

File "<ipython-input-24-7fa95de0f250>", line 1, in <module>
imp.reload(temp)

File "/home/user/anaconda3/lib/python3.4/imp.py", line 315, in reload
return importlib.reload(module)

File "/home/user/anaconda3/lib/python3.4/importlib/__init__.py", line 149, in reload
methods.exec(module)

File "<frozen importlib._bootstrap>", line 1134, in exec

AttributeError: 'NoneType' object has no attribute 'name'

就我而言,解决方案是切换回最初进行导入的路径。

关于python - imp.reload - NoneType 对象没有属性 'name',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27272574/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com