NameError: name 'record' is not defined. Python 3
NameError: name 'record' is not defined. Python 3
我一直在尽我所能 运行 这段代码,但我无法弄清楚问题出在哪里。这是 python 中的一个 server/client 聊天程序 3. 我得到的错误是:
Traceback (most recent call last):
File "/home/nate/Desktop/soc_chat/server_soc.py", line 48,<module>
handler = ClientHandler(client, record)
NameError: name 'record' is not defined
我不确定如何解决这个问题。任何帮助都会很棒。我在 ubuntu,安装了 python 3。我已经尝试在终端中 运行 将代码设置为 'python3 myFile.py' 而不是 'python myFile.py' 以确保它不会尝试将其 运行 设置为 python 2。正如我所说,任何帮助将不胜感激。
这是代码(服务器端):
from socket import *
from codecs import decode
from chatrecord import ChatRecord
from threading import Thread
from time import ctime
class ClientHandler(Thread):
def __init__(self, client, record):
Thread.__init__(self)
self._client = client
self._record = record
def run(self):
self._client.send(bytes('Welcome', CODE))
self._name = decode(self._client.recv(BUFSIZE), CODE)
self._client.send(bytes(str(self._record), CODE))
while True:
message = decode(self._client.recv(BUFSIZE), CODE)
if not message:
print('Client disconnected')
self._client.close()
break
else:
message = self._name + '' + \
ctime() + '\n' + message
self._record.add(message)
self._client.send(bytes(str(self._record), CODE))
HOST = 'localhost'
PORT = 5000
BUFSIZE = 1024
ADDRESS = (HOST, PORT)
CODE = 'ascii'
server = socket(AF_INET, SOCK_STREAM)
server.bind(ADDRESS)
server.listen(5)
while True:
print('Waiting for connection...')
client, address = server.accept()
print('...connected from:', address)
handler = ClientHandler(client, record)
handler.start()
代码(客户端):
from socket import *
from codecs import decode
HOST = 'localhost'
PORT = 5000
BUFSIZE = 1024
ADDRESS = (HOST, PORT)
CODE = 'ascii'
server = socket(AF_INET, SOCK_STREAM)
server.connect(ADDRESS)
print(decode(server.recv(BUFSIZE), CODE))
name = input('Enter your name: ')
server.send(bytes(name, CODE))
while True:
record = decode(server.recv(BUFSIZE), CODE)
if not record:
print('server disconnected')
break
print(record)
message = input('> ')
if not message:
print('Server disconnected')
break
server.send(bytes(message, CODE))
server.close()
代码(chatrecord.py)
class ChatRecord(object):
def __init__(self):
self.data = []
def add(self, s):
self.data.appent(s)
def __str__(self):
if len(self.data) == 0:
return 'No messages yet!'
else:
return '\n'.join(self.data)
我要冒险说你忘了下面这句话:
record = ChatRecord()
您导入 class 但从未在服务器端代码中使用它。
请注意,您在 ChatRecord.add()
方法中拼错了 list.append()
:
def add(self, s):
self.data.appent(s)
# ^
我一直在尽我所能 运行 这段代码,但我无法弄清楚问题出在哪里。这是 python 中的一个 server/client 聊天程序 3. 我得到的错误是:
Traceback (most recent call last):
File "/home/nate/Desktop/soc_chat/server_soc.py", line 48,<module>
handler = ClientHandler(client, record)
NameError: name 'record' is not defined
我不确定如何解决这个问题。任何帮助都会很棒。我在 ubuntu,安装了 python 3。我已经尝试在终端中 运行 将代码设置为 'python3 myFile.py' 而不是 'python myFile.py' 以确保它不会尝试将其 运行 设置为 python 2。正如我所说,任何帮助将不胜感激。
这是代码(服务器端):
from socket import *
from codecs import decode
from chatrecord import ChatRecord
from threading import Thread
from time import ctime
class ClientHandler(Thread):
def __init__(self, client, record):
Thread.__init__(self)
self._client = client
self._record = record
def run(self):
self._client.send(bytes('Welcome', CODE))
self._name = decode(self._client.recv(BUFSIZE), CODE)
self._client.send(bytes(str(self._record), CODE))
while True:
message = decode(self._client.recv(BUFSIZE), CODE)
if not message:
print('Client disconnected')
self._client.close()
break
else:
message = self._name + '' + \
ctime() + '\n' + message
self._record.add(message)
self._client.send(bytes(str(self._record), CODE))
HOST = 'localhost'
PORT = 5000
BUFSIZE = 1024
ADDRESS = (HOST, PORT)
CODE = 'ascii'
server = socket(AF_INET, SOCK_STREAM)
server.bind(ADDRESS)
server.listen(5)
while True:
print('Waiting for connection...')
client, address = server.accept()
print('...connected from:', address)
handler = ClientHandler(client, record)
handler.start()
代码(客户端):
from socket import *
from codecs import decode
HOST = 'localhost'
PORT = 5000
BUFSIZE = 1024
ADDRESS = (HOST, PORT)
CODE = 'ascii'
server = socket(AF_INET, SOCK_STREAM)
server.connect(ADDRESS)
print(decode(server.recv(BUFSIZE), CODE))
name = input('Enter your name: ')
server.send(bytes(name, CODE))
while True:
record = decode(server.recv(BUFSIZE), CODE)
if not record:
print('server disconnected')
break
print(record)
message = input('> ')
if not message:
print('Server disconnected')
break
server.send(bytes(message, CODE))
server.close()
代码(chatrecord.py)
class ChatRecord(object):
def __init__(self):
self.data = []
def add(self, s):
self.data.appent(s)
def __str__(self):
if len(self.data) == 0:
return 'No messages yet!'
else:
return '\n'.join(self.data)
我要冒险说你忘了下面这句话:
record = ChatRecord()
您导入 class 但从未在服务器端代码中使用它。
请注意,您在 ChatRecord.add()
方法中拼错了 list.append()
:
def add(self, s):
self.data.appent(s)
# ^