【发布时间】:2018-03-24 18:29:06
【问题描述】:
我正在将一个包从 python 2 更新到 3,但我无法让导入工作。即使是像 import math 或 import os 这样简单的方法。当我闲置运行时,一切正常。
如果我尝试通过终端运行它,我会收到一条加载过程失败的消息。在调试器中,它通过几个文件路径运行并且总是给出相同的错误。 我已经阅读了很多关于进口的文档,并且我相当确定进口是正确的。
import os
...
import logging
...
...
import argparse
log = logging.getLogger(__name__)
ap = ArgumentParser()
我已找到此文档以确认我做这些正确。
https://docs.python.org/3/library/logging.html
https://docs.python.org/3/howto/argparse.html
无法发布到操作系统的最后一个链接
所以一切似乎都正确,但是当我运行我的代码时,我可以告诉我没有从 argparse 得到输出,这促使我运行调试器。 以下是我得到的错误。
为操作系统
Traceback (most recent call last):
File "C:/path_to/Apps/python/py-scripts/new/untitled.py", line 3, in <module>
import logging
File "<frozen importlib._bootstrap>", line 968, in _find_and_load
File "<frozen importlib._bootstrap>", line 148, in __enter__
File "<frozen importlib._bootstrap>", line 174, in _get_module_lock
File "<frozen importlib._bootstrap>", line 59, in __init__
File "<frozen importlib._bootstrap>", line 59, in __init__
File "C:\path_to\AppData\Local\Programs\Python\Python36\lib\bdb.py", line 48, in trace_dispatch
return self.dispatch_line(frame)
File "C:\path_to\AppData\Local\Programs\Python\Python36\lib\bdb.py", line 66, in dispatch_line
self.user_line(frame)
File "C:\path_to\AppData\Local\Programs\Python\Python36\lib\idlelib\debugger.py", line 24, in user_line
self.gui.interaction(message, frame)
AttributeError: '_ModuleLock' object has no attribute 'name'
用于记录
Traceback (most recent call last):
File "C:/path_to/Apps/python/py-scripts/new/untitled.py", line 3, in <module>
import logging
File "<frozen importlib._bootstrap>", line 968, in _find_and_load
File "<frozen importlib._bootstrap>", line 148, in __enter__
File "<frozen importlib._bootstrap>", line 174, in _get_module_lock
File "<frozen importlib._bootstrap>", line 59, in __init__
File "<frozen importlib._bootstrap>", line 59, in __init__
File "C:\path_to\AppData\Local\Programs\Python\Python36\lib\bdb.py", line 48, in trace_dispatch
return self.dispatch_line(frame)
File "C:\path_to\AppData\Local\Programs\Python\Python36\lib\bdb.py", line 66, in dispatch_line
self.user_line(frame)
File "C:\path_to\AppData\Local\Programs\Python\Python36 \lib\idlelib\debugger.py", line 24, in user_line
self.gui.interaction(message, frame)
AttributeError: '_ModuleLock' object has no attribute 'name'
在发布此内容时,我注意到它从 AppData 调用库,而不是我安装 python 的位置。这也正常吗?
【问题讨论】:
-
请包含错误信息的完整回溯。最可能的问题是您当前路径中的某些内容与内置模块发生冲突;错误消息可以帮助诊断。
-
先生。 Martijn Pieters,我已经更新了这个问题以反映一个最小、完整和可验证的例子,或者我认为。如果可能的话,请移除保留,以便有人能够提供帮助。
-
我仍然无法重现这一点,并且回溯也不会立即告诉我发生了什么,但我还是重新打开了它。请注意,这些路径可能是记录在
.pyc文件中的路径,这些路径可能是创建您安装的 Python 发行版的原因,不一定反映您自己的文件系统。 -
没关系,它是 3.6.3。
-
我认为这是 IDLE 调试器和引导模块锁定代码之间的不良交互。创建了一个空的
_ModuleLock实例,并在该实例上调用__init__。但是name属性是在第 61 行设置的,所以 before 指向任何可能触发尝试查看该属性的尝试从不同的线程 可能会以那个例外。为什么还有另一个线程试图加载属性name尚不清楚。
标签: python-3.x debugging import attributeerror