2011-07-08 39 views
7

Tôi đã thực hiện một số nghiên cứu trước về lỗi này. Có một số giải thích ở đây trong StackOverflow có liên quan, các giải pháp được đề xuất là khá không liên quan mặc dù.AttributeError: đối tượng 'module' không có thuộc tính 'maketrans'

Khi tôi cố gắng nhập Gtk từ gi.repository, nó bị treo với kết quả như sau:
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' 

Do đây là một nhập khẩu trực tiếp từ python console và không bằng cách thực hiện một kịch bản file python Tôi don thậm chí không có một đầu mối làm thế nào để xử lý này.

+1

có vẻ như nhập khẩu của một mô-đun python 2 với python 3 là 'string.maketrans' vắng mặt trong python 3 –

Trả lời

10

Ok, tôi đã cố gắng làm cho nó hoạt động. Mặc dù là một workaround bẩn:

tôi sửa đổi /usr/lib64/python3.2/site-packages/gi/module.py

trong dòng 127 Tôi thay string.maketrans với str.maketrans để nó phù hợp với python 3 tài liệu.

Hy vọng sẽ hữu ích cho bất kỳ ai trong hoàn cảnh của tôi.

Hugo

3

này có vẻ là một lỗi được biết bug737375 và nó đã được cố định (gần giống như giải pháp của riêng Hugo).

Bạn có thể tìm việc sửa chữa tại các chi nhánh chủ nhân của kho pygopbject đây:
http://git.gnome.org/browse/pygobject/commit/?id=8f89ff24fcac627ce15ca93038711fded1a7c5ed

Dù sao, tôi sẽ viết lại ở đây những gì đang trong diff, vì vậy có lẽ tôi sẽ giúp bạn tiết kiệm một số thời gian :)

Từ file: /usr/lib64/python3.2/site-packages/gi/module.py

Bạn nên thay thế:

import string 

với:

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

Và một lần nữa thay thế (khoảng dòng 130):

ascii_upper_trans = string.maketrans(

với:

ascii_upper_trans = maketrans(
+0

Đây là chính xác giải pháp cần thiết, thật không may. Cảm ơn. – leetNightshade

+0

Đó là những gì tôi nhận được khi tôi cố gắng nhập. từ chuỗi nhập maketrans NhậpError: không thể nhập tên 'maketrans' –

1

Tôi đã cố gắng để chạy string.maketrans sử dụng Jupyter máy tính xách tay và nó thông báo lỗi:

the module string has no attribute maketrans.

Thay đổi mã thành str.maketrans đã thực hiện thủ thuật. Cần lưu ý rằng tuy nhiên tôi không phải thực hiện bất kỳ thay đổi đối với:

/usr/lib64/python3.2/site-packages/gi/module.py 
Các vấn đề liên quan