属性错误:'module'对象没有'maketrans'属性。

22

我之前做过一些关于这个错误的研究。这里在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' 

因为这是直接从Python控制台导入的,而不是通过执行Python文件脚本,所以我甚至不知道如何处理它。


2
看起来你在用 Python 3 导入了 Python 2 的模块。因为在 Python 3 中,string.maketrans 这个函数已经被删除了。 - Dan D.
4个回答

25

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

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

在第127行,我用str.maketrans替换了string.maketrans,以符合Python 3文档。

希望对处于我的情况的任何人有所帮助。

Hugo


1
请简化您的问题,例如如何在Python3中翻译string.maketrans,并接受您的答案,再次简化为“用str.maketran替换string.maketrans”。 - Искрен Станиславов

12

我试图在Jupyter notebook中运行string.maketrans,但是它报了一个错误信息:

模块string没有属性maketrans。

将代码更改为str.maketrans解决了问题。但是需要注意的是,我不需要对以下内容进行任何更改:

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

我无法在Windows 8.1上找到Python 3.7的module.py目录?@Stats_Lover - zircon

8
这似乎是一个已知的错误bug737375,并且已经被修复(几乎像Hugo自己的解决方案)。
您可以在此处找到pygopbject存储库的主分支中的修复程序:
http://git.gnome.org/browse/pygobject/commit/?id=8f89ff24fcac627ce15ca93038711fded1a7c5ed 无论如何,我将在此处重写差异内容,因此也许可以为您节省一些时间:)
从文件中: /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(

这恰好是所需的解决方案,不幸的是。谢谢。 - leetNightshade
当我尝试导入时,就会出现这个错误:从字符串中导入maketrans ImportError: 无法导入名称'maketrans' - Muhammad Haseeb Khan

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接