AttributeError: объект 'module' не имеет атрибута 'maketrans'
Я делал некоторые предыдущие исследования об этой ошибке. В StackOverflow есть некоторые объяснения, предлагаемые решения совершенно не связаны.
Когда я пытаюсь импортировать Gtk из gi.repository, он выходит со следующим выходом:
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 script, я даже не знаю, как справиться с этим.
Ответы
Ответ 1
Хорошо, мне удалось заставить его работать. Несмотря на грязное обходное решение:
Я изменил /usr/lib64/python3.2/site-packages/gi/module.py
в строке 127 Я заменил string.maketrans
на str.maketrans
, чтобы он соответствовал документам python 3.
Надеюсь быть полезной для всех, кто в моих обстоятельствах.
Уго
Ответ 2
Я пытался запустить string.maketrans
с помощью ноутбука Jupyter, и это сообщение об ошибке:
строка модуля не имеет атрибутов maketrans.
Изменение кода на str.maketrans
выполнило трюк. Следует, однако, отметить, что мне не нужно вносить какие-либо изменения в:
/usr/lib64/python3.2/site-packages/gi/module.py
Ответ 3
Это кажется известной ошибкой bug737375, и она была исправлена (почти как собственное решение Hugo).
Вы можете найти исправление в главной ветке хранилища pygopbject:
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(
Ответ 4
Просто замените string.maketrans
на str.maketrans
Как сказал Искрен Станиславов в ответе ниже.