2011-07-08 3 views
7

Robiłem już poprzednie badania na temat tego błędu. W StackOverflow istnieją pewne wyjaśnienia, sugerowane rozwiązania są jednak zupełnie niepowiązane.AttributeError: Obiekt 'module' nie ma atrybutu 'maketrans'

Kiedy próbuję zaimportować Gtk z gi.repository, to wywala się z następującym wyjścia:
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' 

Ponieważ jest to import prosto z konsoli Pythona i nie wykonując skrypt pliku python I don Nawet nie ma pojęcia, jak sobie z tym poradzić.

+1

wydaje swój importowanie moduł Pythona python 2 z 3 jako 'string.maketrans' jest nieobecny w Pythonie 3 –

Odpowiedz

10

Ok, udało mi się go wykonać. Mimo to brudny obejście:

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

w linii 127 Wymieniłem string.maketrans z str.maketrans więc jest on zgodny z Pythonie 3 docs.

Mam nadzieję, że będę pomocny dla każdego w mojej sytuacji.

Hugo

3

To wydaje się być znany błąd bug737375 i została ona ustalona (prawie jak Hugo własne rozwiązanie).

można znaleźć poprawkę w branży głównego repozytorium pygopbject tutaj:
http://git.gnome.org/browse/pygobject/commit/?id=8f89ff24fcac627ce15ca93038711fded1a7c5ed

Zresztą ja przepisać tu co w diff, więc może będę Ci zaoszczędzić trochę czasu :)

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

należy wymienić:

import string 

z:

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

i ponownie wymienić (wokół linii 130):

ascii_upper_trans = string.maketrans(

z:

ascii_upper_trans = maketrans(
+0

To jest dokładna rozwiązanie konieczne, niestety. Dzięki. – leetNightshade

+0

To właśnie dostałem, gdy próbowałem importować. z łańcucha importu maketrans ImportError: nie można zaimportować nazwy "maketrans" –

1

starałem się uruchomić string.maketrans użyciu Jupyter notebooka i komunikat o błędzie:

the module string has no attribute maketrans.

Zmiana kodu na str.maketrans rozwiązała problem. Należy jednak zauważyć, że nie trzeba wprowadzać żadnych zmian w:

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