gpt4 book ai didi

Python 3.5 BytesIO 错误

转载 作者:行者123 更新时间:2023-12-01 03:51:28 24 4
gpt4 key购买 nike

我正在用 python 2.7 制作一个项目,但由于文档是用 python 3.5 编写的,所以它开始在最后部分给我带来一些错误。所以我将所有内容更改为 python 3.5,但由于 bytesIO,它给了我一个错误。你能帮我理解为什么吗?我应该做什么?该错误来自 string_dinamica.write('P3\n') 上的 def repr。我留下了所有代码以备需要时使用。谢谢您的帮助。注意:只是为了确认这适用于 python 2.7,但不适用于 3.5

from io import BytesIO
from cor_rgb_42347 import CorRGB

class Imagem:
def __init__(self, numero_linhas, numero_colunas):
self.numero_linhas = numero_linhas
self.numero_colunas = numero_colunas
self.linhas = []
for n in range(numero_linhas):
linha = []
for m in range(numero_colunas):
linha.append(CorRGB(0.0, 0.0, 0.0))
self.linhas.append(linha)

def __repr__(self):
string_dinamica = BytesIO()

string_dinamica.write('P3\n')
string_dinamica.write("#mcg@leim@isel 2015/16\n")
string_dinamica.write(str(self.numero_colunas) + " " \
+ str(self.numero_linhas) + "\n")
string_dinamica.write("255\n")
for linha in range(self.numero_linhas):
for coluna in range(self.numero_colunas):
string_dinamica.write(str(self.linhas[linha][coluna])+ " ")
string_dinamica.write("\n")

resultado = string_dinamica.getvalue()

string_dinamica.close()

return resultado


def set_cor(self, linha, coluna, cor_rgb):
"""Permite especificar a cor RGB do pixel na linha "linha",
coluna "coluna".
"""
self.linhas[linha-1][coluna-1] = cor_rgb

def get_cor(self, linha, coluna):
"""Permite obter a cor RGB do pixel na linha "linha",
coluna "coluna".
"""
return self.linhas[linha-1][coluna-1]

def guardar_como_ppm(self, nome_ficheiro):

"""Permite guardar a imagem em formato PPM ASCII num ficheiro.
"""
ficheiro = open(nome_ficheiro, 'w')
ficheiro.write(str(self))
ficheiro.close()



if __name__ == "__main__":
imagem1 = Imagem(5,5)
print(imagem1)




Traceback (most recent call last):
File "C:\Users\Utilizador\Desktop\Projectos Finais\Projecto_42347\imagem_42347.py", line 60, in <module>
print(imagem1)
File "C:\Users\Utilizador\Desktop\Projectos Finais\Projecto_42347\imagem_42347.py", line 19, in __repr__
string_dinamica.write('P3\n')
TypeError: a bytes-like object is required, not 'str'

最佳答案

对于 Python 3,只需将 BytesIO 更改为 StringIO。 Python 3 字符串是 Unicode 字符串而不是字节字符串,并且 __repr__ 应返回 Python 3 中的 Unicode 字符串。

如果您尝试像其他答案建议的那样返回 bytes 对象,您将得到:

TypeError: __repr__ returned non-string (type bytes)

关于Python 3.5 BytesIO 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38173918/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com