AttributeError:“模块”对象没有属性“maketrans”

Posted

技术标签:

【中文标题】AttributeError:“模块”对象没有属性“maketrans”【英文标题】:AttributeError: 'module' object has no attribute 'maketrans' 【发布时间】:2011-07-08 17:46:27 【问题描述】:

我之前一直在对这个错误进行一些研究。 *** 相关的这里有一些解释,但是建议的解决方案是完全无关的。

当我尝试从 gi.repository 导入 Gtk 时,它崩溃并显示以下输出: bash-4.2$ python3 Python 3.2 (r32:88445, Feb 21 2011, 21:11:06) [GCC 4.6.0 20110212 (Red Hat 4.6.0-0.7)] on linux2 Type "help", "copyright", "credits" or "license" for more information.

>>> from gi.repository import Gtk

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python3.2/site-packages/gi/importer.py", line 76, in load_module  
dynamic_module._load()
File "/usr/lib64/python3.2/site-packages/gi/module.py", line 251, in _load
overrides_modules = __import__('gi.overrides', fromlist=[self._namespace])
File "/usr/lib64/python3.2/site-packages/gi/overrides/Gtk.py", line 400, in <module>
class MessageDialog(Gtk.MessageDialog, Dialog):
File "/usr/lib64/python3.2/site-packages/gi/overrides/Gtk.py", line 404, in   
MessageDialog
type=Gtk.MessageType.INFO,
File "/usr/lib64/python3.2/site-packages/gi/module.py", line 127, in __getattr__
ascii_upper_trans = string.maketrans(
AttributeError: 'module' object has no attribute 'maketrans' 

由于这是直接从 python 控制台导入,而不是通过执行 python 文件脚本,我什至不知道如何处理。

【问题讨论】:

看来你在 python 3 中导入了一个带有 python 3 的 python 2 模块为 string.maketrans 在 python 3 中不存在 【参考方案1】:

好的,我设法让它工作。尽管是一个肮脏的解决方法:

我修改了/usr/lib64/python3.2/site-packages/gi/module.py

在第 127 行,我将 string.maketrans 替换为 str.maketrans,因此它符合 python 3 文档。

希望对我遇到的任何人有所帮助。

雨果

【讨论】:

请将您的问题简化为如何在 python3 中翻译string.maketrans 并接受您的答案,再次简化为“将string.maketrans 替换为str.maketran”。【参考方案2】:

我试图使用 Jupyter 笔记本运行 string.maketrans 并显示错误消息:

模块字符串没有属性maketrans。

将代码更改为str.maketrans 就成功了。但是必须注意的是,我不必对以下内容进行任何更改:

/usr/lib64/python3.2/site-packages/gi/module.py

【讨论】:

我无法在 Win 8.1 for python 3.7 上找到module.py 的目录? @Stats_Lover【参考方案3】:

这似乎是一个已知的错误bug737375 并且已修复(几乎就像 Hugo 自己的解决方案一样)。

您可以在 pygopbject 存储库的 master 分支中找到修复程序:http://git.gnome.org/browse/pygobject/commit/?id=8f89ff24fcac627ce15ca93038711fded1a7c5ed

不管怎样,我会在这里重写 diff 中的内容,所以也许我会为你节省一些时间 :)

来自文件:/usr/lib64/python3.2/site-packages/gi/module.py

你应该替换:

import string

与:

try:
    maketrans = ''.maketrans
except AttributeError:
    # fallback for Python 2
    from string import maketrans

再次替换(大约第 130 行):

ascii_upper_trans = string.maketrans(

与:

ascii_upper_trans = maketrans(

【讨论】:

不幸的是,这正是必要的解决方案。谢谢。 这就是我尝试导入时得到的结果。 from string import maketrans ImportError: cannot import name 'maketrans'【参考方案4】:

只需将string.maketrans 替换为str.maketrans

正如Искрен Станиславов 在下面的回答中所说。

【讨论】:

以上是关于AttributeError:“模块”对象没有属性“maketrans”的主要内容,如果未能解决你的问题,请参考以下文章

AttributeError:“模块”对象没有属性

AttributeError:“模块”对象没有属性“百分位”

AttributeError:“模块”对象没有属性

无法安装模块 - AttributeError: 'NoneType' 对象没有属性 'loader'

AttributeError:“模块”对象没有属性“urlopen”

AttributeError:“模块”对象没有属性“ORB”