Python 属性错误';非类型';对象没有属性';recv&x27;
首先我要说的是,我以前从未尝试过用python编写代码 我试图让Twitch IRC机器人工作,但我一直失败 我的bot.py代码如下所示:Python 属性错误';非类型';对象没有属性';recv&x27;,python,python-3.x,Python,Python 3.x,首先我要说的是,我以前从未尝试过用python编写代码 我试图让Twitch IRC机器人工作,但我一直失败 我的bot.py代码如下所示: from src.lib import irc as irc_ from src.lib import functions_general from src.lib import functions_commands as commands from src.config import config class PartyMachine:
from src.lib import irc as irc_
from src.lib import functions_general
from src.lib import functions_commands as commands
from src.config import config
class PartyMachine:
def __init__(self, config):
self.config = config
self.irc = irc_.irc(config)
self.socket = self.irc.get_irc_socket_object()
def sock(self):
irc = self.irc
sock = self.socket
config = self.config
kage = sock
while True:
data = sock.recv(2048).rstrip()
if len(data) == 0:
pp('Connection was lost, reconnecting.')
sock = self.irc.get_irc_socket_object()
if config['debug']:
print (data)
我的config.py在这里:
'socket_buffer_size': 1024
def get_irc_socket_object(self):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(10)
self.sock = sock
try:
sock.connect((self.config['server'], self.config['port']))
except:
pp('Cannot connect to server (%s:%s).' % (self.config['server'], self.config['port']), 'error')
sys.exit()
sock.settimeout(None)
def sock_send(sock, send, self):
sock.send('USER %s\r\n' % self.config['username'], sock.encode('utf-8'), send.encode('utf-8'))
sock.send('PASS %s\r\n' % self.config['oauth_password'])
sock.send('NICK %s\r\n' % self.config['username'])
if self.check_login_status(sock.recv(1024)):
pp('Login successful.')
else:
pp('Login unsuccessful. (hint: make sure your oauth token is set in self.config/self.config.py).', 'error')
sys.exit()
from sys import argv
from src.bot import *
from src.config.config import *
bot = PartyMachine(config).sock()
我的irc.py在这里:
'socket_buffer_size': 1024
def get_irc_socket_object(self):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(10)
self.sock = sock
try:
sock.connect((self.config['server'], self.config['port']))
except:
pp('Cannot connect to server (%s:%s).' % (self.config['server'], self.config['port']), 'error')
sys.exit()
sock.settimeout(None)
def sock_send(sock, send, self):
sock.send('USER %s\r\n' % self.config['username'], sock.encode('utf-8'), send.encode('utf-8'))
sock.send('PASS %s\r\n' % self.config['oauth_password'])
sock.send('NICK %s\r\n' % self.config['username'])
if self.check_login_status(sock.recv(1024)):
pp('Login successful.')
else:
pp('Login unsuccessful. (hint: make sure your oauth token is set in self.config/self.config.py).', 'error')
sys.exit()
from sys import argv
from src.bot import *
from src.config.config import *
bot = PartyMachine(config).sock()
我的service.py在这里:
'socket_buffer_size': 1024
def get_irc_socket_object(self):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(10)
self.sock = sock
try:
sock.connect((self.config['server'], self.config['port']))
except:
pp('Cannot connect to server (%s:%s).' % (self.config['server'], self.config['port']), 'error')
sys.exit()
sock.settimeout(None)
def sock_send(sock, send, self):
sock.send('USER %s\r\n' % self.config['username'], sock.encode('utf-8'), send.encode('utf-8'))
sock.send('PASS %s\r\n' % self.config['oauth_password'])
sock.send('NICK %s\r\n' % self.config['username'])
if self.check_login_status(sock.recv(1024)):
pp('Login successful.')
else:
pp('Login unsuccessful. (hint: make sure your oauth token is set in self.config/self.config.py).', 'error')
sys.exit()
from sys import argv
from src.bot import *
from src.config.config import *
bot = PartyMachine(config).sock()
由于“
AttributeError'nonetype'对象没有属性'recv'
”而一直失败。这怎么可能 您的get\u irc\u socket\u对象(self)
可能是问题所在。您可以通过以下行调用它:self.socket=self.irc.get\u irc\u socket\u object()
。这意味着python希望函数get\u irc\u socket\u object(self)
返回一个socket对象,但您不返回任何东西(您只需编写self.sock=sock
,它不会做任何事情,因为您在剩下的代码中使用了self.socket
)。因此,函数返回none
,因此现在self.socket
将其作为其值。因此,当您调用recv时,您会收到错误消息
另外,请清理变量名。Sock在代码中使用得太频繁,因此很难理解。您的
get\u irc\u socket\u对象(self)
可能是问题所在。您可以通过以下行调用它:self.socket=self.irc.get\u irc\u socket\u object()
。这意味着python希望函数get\u irc\u socket\u object(self)
返回一个socket对象,但您不返回任何东西(您只需编写self.sock=sock
,它不会做任何事情,因为您在剩下的代码中使用了self.socket
)。因此,函数返回none
,因此现在self.socket
将其作为其值。因此,当您调用recv时,您会收到错误消息
另外,请清理变量名。Sock在您的代码中使用得太频繁,因此很难理解。请发布异常的完整跟踪,并指出引用的代码行。您使用的名称
Sock
太多了。每个标识符只有一件事。sock
在哪里定义?@Bim请注意修复Python问题中的格式。在某些情况下,您可能会无意中修复实际问题。在本例中,您所做的缩进更改可能不正确。@glibdud确实很抱歉。请发布异常的完整跟踪,并指出引用了哪行代码。您使用名称sock
处理的内容太多。每个标识符只有一件事。sock
在哪里定义?@Bim请注意修复Python问题中的格式。在某些情况下,您可能会无意中修复实际问题。在本例中,您所做的缩进更改可能不正确。@glibdud确实很抱歉。