AttributeError:'module'对象没有属性'maketrans'

Hug*_*ugo 13 python-3.x

我一直在做一些关于这个错误的研究.这里有一些与StackOverflow相关的解释,但建议的解决方案是非常不相关的.

当我尝试从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' 
Run Code Online (Sandbox Code Playgroud)

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

小智 18

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

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

在第127行我替换string.maketransstr.maketrans所以它符合python 3文档.

希望在我的环境中为任何人提供帮助.

雨果


Sta*_*ver 7

我试图string.maketrans使用Jupyter笔记本运行,并且出现错误消息:

模块字符串没有属性maketrans。

更改代码即可达到str.maketrans目的。但是必须指出,我不必对以下内容进行任何更改:

/usr/lib64/python3.2/site-packages/gi/module.py
Run Code Online (Sandbox Code Playgroud)


Rik*_*ggi 6

这似乎是一个已知的bug bug737375,并且已得到修复(几乎像Hugo自己的解决方案一样)。

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

无论如何,我将在这里重写差异内容,所以也许可以为您节省一些时间:)

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

您应该替换:

import string
Run Code Online (Sandbox Code Playgroud)

与:

try:
    maketrans = ''.maketrans
except AttributeError:
    # fallback for Python 2
    from string import maketrans
Run Code Online (Sandbox Code Playgroud)

并再次替换(在第130行附近):

ascii_upper_trans = string.maketrans(
Run Code Online (Sandbox Code Playgroud)

与:

ascii_upper_trans = maketrans(
Run Code Online (Sandbox Code Playgroud)