2010-11-05 37 views
8

Tôi đang cố chuyển đổi thư viện Python được tạo cho Python 2 thành Python 3, here is the code.Python 2 đến 3 byte/chuỗi lỗi

Tôi có một lỗi ở dòng 152. Trong phiên bản Py2, chức năng là:


def write(self, data): 
    self._write_buffer += data 

Lỗi này là:

TypeError: Can't convert 'bytes' object to str implicitly

tôi thấy rằng tôi đã để giải mã các biến, vì vậy tôi đã thay đổi chức năng thành:


def write(self, data): 
    self._write_buffer += data.decode('utf8') 

Nó hoạt động nhưng tôi có một lỗi khác trong thư viện asyncore nói rằng

(the Type) must be bytes or buffer, not str

Vì vậy, tôi có thể làm gì?

+0

Vậy vấn đề chính xác là gì? –

Trả lời

5

Bạn cần phải rõ ràng về nơi bạn muốn byte và nơi bạn muốn chuỗi. Nếu bạn chỉ cần thêm decodeencode nơi các lỗi xuất hiện, bạn sẽ chơi trò đánh trống. Trong trường hợp của bạn, bạn đang viết một thực hiện socket. Ổ cắm đối phó với byte, không phải chuỗi. Vì vậy, tôi sẽ nghĩ rằng _write_buffer của bạn nên là một đối tượng byte, không phải là một chuỗi như bạn bây giờ có nó.

Dòng 91 sẽ thay đổi thành:

self._write_buffer = b'' 

Sau đó, bạn có thể làm việc từ đó để đảm bảo rằng bạn sử dụng byte trong suốt.

+0

Ok, cảm ơn. Đó là vấn đề. Tôi vẫn có một số lỗi nhưng tôi sẽ cố gắng sửa tệp của mình để sử dụng byte ở mọi nơi cần thiết. –

Các vấn đề liên quan