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: 'NoneType' 对象没有属性 'loader'