Python3:只能将str(而不是“字节”)连接到str

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

我正在从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_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我认为这不是一个好的重复选择。这在某种程度上解释了问题;但在这种情况下,进行转换是合适的,而在这种情况下,删除不必要的转换更合适。很好的解释。还有一些更详细的信息。