Python3:只能将str(而不是“字节”)连接到str
我正在从Python2更新我的代码,我得到了一个以前在该版本中有效的错误。我迷路了,请帮帮我 我在except函数中遇到一个错误:Python3:只能将str(而不是“字节”)连接到str,python,python-3.x,string,typeerror,Python,Python 3.x,String,Typeerror,我正在从Python2更新我的代码,我得到了一个以前在该版本中有效的错误。我迷路了,请帮帮我 我在except函数中遇到一个错误: for c in text: try: if isEncrypt: i = tp_alphabet.index(c) ret += tc_alphabet[i] else: i = tc_alphabet.index(c) ret += tp_alphabe
for c in text:
try:
if isEncrypt:
i = tp_alphabet.index(c)
ret += tc_alphabet[i]
else:
i = tc_alphabet.index(c)
ret += tp_alphabet[i]
except ValueError as e:
wrchar = c.encode('utf-8')
raise Exception("Can't find char '" + wrchar + "' of text in alphabet!")
当我运行此命令时:
dec = machine.decrypt(plaintext)
print(dec)
这就是错误:
File "python3.py", line 133, in __encDec
raise Exception("Can't find char '" + wrchar + "' of text in alphabet!")
TypeError: can only concatenate str (not "bytes") to str
我正在更新python 2中的代码
在2.x中,在不使用任何\uuuuuuuuuuuuuuuuuuuuu
声明的情况下,类型str
与字节
相同,Unicode文本(也称为文本)存储在Unicode
对象中
在2.x版本的代码中,text
(因此也是c
)可能是unicode
类型,而普通字符串文本(例如“找不到字符”
)是str
(即字节
)对象。因此需要进行转换:将Unicode数据编码为字节,并连接在一起,即代码行wrchar=c.encode('utf-8')
在3.x中,字符串可以正常工作str
是文本类型,存储Unicode代码点(not与字符相同,顺便说一句),是字节的别名。现在已经没有了unicode
,但如果有,它将与str
相同
因此,现在进行此编码步骤不仅没有必要,而且是一个bug。因此,您需要做的是删除它,并将c
直接插入到输出字符串中
在我们进行现代化的同时,让我们用现代化的方式来组装绳子
except ValueError as e:
raise Exception(f"Can't find char '{c}' of text in alphabet!")
用你自己的话来说,你认为wrchar=c.encode('utf-8')
有什么作用?为什么代码中有这一行?请阅读和了解背景。@TheLazyScript我认为这不是一个好的重复选择。这在某种程度上解释了问题;但在这种情况下,进行转换是合适的,而在这种情况下,删除不必要的转换更合适。很好的解释。还有一些更详细的信息。