PSYCHOPY错误:AttributeError:模块“日志记录”没有属性“ getLogger”

时间:2019-03-15 02:34:03

标签: python psychopy

我是Python和Pscyhopy的新手,每当我尝试运行实验时,都会出现此错误:

File
"/private/var/folders/nb/k9sz30gj29l_7d8l6tmbcxhr0000gn/T/AppTranslocation/F9CCC296-B2DF-4D05-A6AE-F9DE0928FE0E/d/PsychoPy3.app/Contents/Resources/lib/python3.6/lib2to3/pgen2/driver.py", line 120, in load_grammar
    logger = logging.getLogger()
AttributeError: module 'logging' has no attribute 'getLogger'

我已经确保没有任何名为logging.py的文件,但它仍然不会运行。演示运行正常。

2 个答案:

答案 0 :(得分:8)

每当有循环导入或任何其他没有getLogger的日志记录模块时,就会发生这种类型的问题。 尽管您说您搜索了命名logging.py的任何文件,但是我仍然认为您的项目在某处具有filename.logging.py。如果您正在使用的当前文件的名称为logging.py,请更改它,否则它将给出循环导入错误。 如果没有任何作用,请尝试搜索python库路径,然后只剩下一个选项来更改版本 希望对您有所帮助。

答案 1 :(得分:1)

此问题的一种可能解决方案(取决于确切的细节)与运行代码的位置有关 - 并对其进行更改。例如:

如果我有一个名为 test 的小实用程序,它意味着从命令行运行(它以“shebang”行开头,指定一些 python 或其他),我把它放在里面python 模块的目录(例如 pythonX.Y/site-packages/whatever),其中又包含一个 logging 模块(即 logging.pylogging/__init__.pywhatever 的某处{1}} 目录层次结构),然后尝试运行它(例如,通过 ./test — 再次从 whatever 目录中 — 甚至可能在同一个 site-packages 中的其他地方,我不确定),我会收到你描述的错误。

但是,如果我从 pythonX.Y/site-packages/whatever 目录中复制 [0] 完全相同的文件,并尝试从其他地方运行它(例如,我将其复制到我的主目录,并以 {{ 1}}),那么它就起作用了。反之亦然:如果我将 ~/test 中的工作脚本复制到 ~,它会中断。

这大概也适用于调用事物的各种其他方式,而不仅仅是 shebang 脚本(例如 pythonX.Y/site-packages/whatever 等)... '正在尝试从生命中运行代码,很有可能 python 正在尝试导入该版本的 python -m whatever ... 而不是通常的系统版本。

对于模块所有者,我建议考虑将模块的 logging 重命名为其他名称,以避免为您的用户带来此问题。

对于事物的普通用户,只需注意您从何处调用代码(包括文件在文件系统上的物理位置,相对于可能导入的各种模块)。

希望这有助于有人克服这个错误!这让我有点困惑,而这正是适合我的目的的解决方案。


[0] 注意:创建一个 symlink 是不够的...不过如果在另一个方向上这样做会很有用;无论哪种方式,python 都会找到常规文件的绝对路径,此分析的其余部分适用于该文件所在的任何位置:在模块内部,获取模块的 logging;在模块外,获取系统 logging