Python“;builtins.TypeError:必须是str,而不是bytes";-Twisted LineReceiver.sendLine()

Python“;builtins.TypeError:必须是str,而不是bytes";-Twisted LineReceiver.sendLine(),python,twisted,Python,Twisted,我正在学习Twisted教程(请参见本教程的底部) 我正在尝试连接聊天服务器,但不断出现以下错误 File "/Users/kevin/anaconda3/lib/python3.6/site-packages/twisted/internet/tcp.py", line 1073, in doRead protocol.makeConnection(transport) File "/Users/kevin/anaconda3/lib/python3.6/site-packages

我正在学习Twisted教程(请参见本教程的底部)

我正在尝试连接聊天服务器,但不断出现以下错误

File "/Users/kevin/anaconda3/lib/python3.6/site-packages/twisted/internet/tcp.py", line 1073, in doRead
    protocol.makeConnection(transport)
  File "/Users/kevin/anaconda3/lib/python3.6/site-packages/twisted/internet/protocol.py", line 510, in makeConnection
    self.connectionMade()
  File "twisted_chat.py", line 12, in connectionMade
    self.sendLine("What's your name?") <------------- This line
  File "/Users/kevin/anaconda3/lib/python3.6/site-packages/twisted/protocols/basic.py", line 635, in sendLine
    return self.transport.write(line + self.delimiter)
builtins.TypeError: must be str, not bytes
文件“/Users/kevin/anaconda3/lib/python3.6/site-packages/twisted/internet/tcp.py”,第1073行,多里德
协议.makeConnection(传输)
文件“/Users/kevin/anaconda3/lib/python3.6/site packages/twisted/internet/protocol.py”,第510行,在makeConnection中
self.connectionMade()
文件“twisted_chat.py”,第12行,在ConnectionMode中

self.sendLine(“您叫什么名字?”)您的代码在Python/Anaconda v2中应该可以正常运行,但在v3中却不能运行,除非您遗漏了一些代码。对于Py v3+,请使用以下任一选项:

self.sendLine(b“你叫什么名字?”)

self.sendLine(“你叫什么名字?”.encode('utf8'))


正如您在文档中看到的,参数的类型必须是
bytes

,异常堆栈跟踪与您的代码不匹配。你确定你的代码触发了错误吗?我如何检查?我所做的就是运行twisted_chat.py并尝试连接nc 127.0.0.1 8123
from twisted.internet.protocol import Factory
from twisted.protocols.basic import LineReceiver
from twisted.internet import reactor

class Chat(LineReceiver):
    def __init__(self, users):
        self.users = users
        self.name = None
        self.state = "GETNAME"

    def connectionMade(self):
        self.sendLine("What's your name?") <------- This line

    def connectionLost(self, reason):
        if self.name in self.users:
            del self.users[self.name]