Python类找不到attribu

2024-04-19 15:00:50 发布

您现在位置:Python中文网/ 问答频道 /正文

基本上,我想运行connect函数,但我一直收到CMD错误消息“class StraussBot没有属性‘connectSock’,但我可以明显地看到它确实存在。我试着在这里搜索,但找不到解决这个问题的任何办法。因此,如果您能帮助我找到为什么找不到“connectSock”函数,我们将不胜感激。在

代码:

import socket
    from config import HOST, PORT, CHANNEL

# User Info
USER = "straussbot" # The bots username
PASS = "oauth:sj175lp884ji5c9las089sm9vvaklf" # The auth code

class StraussBot:
    def __init__(self):
        self.Ssock = socket.socket()

    def connectSock(self):
        self.Ssock.connect((HOST, PORT))
        self.Ssock.send(str("Pass " + PASS + "\r\n").encode('UTF-8'))
        self.Ssock.send(str("NICK " + USER + "\r\n").encode('UTF-8'))
        self.Ssock.send(str("JOIN " + CHANNEL + "\r\n").encode('UTF-8'))

if __name__ == "__main__":
    print "Starting the bot..."
    while True:
        straussbot = StraussBot
        try:
            straussbot.connectSock()
        except Exception as e:
            print e

Tags: 函数importselfsendhostconnectsocketutf
3条回答

你混合了制表符和空格。您可能认为您的StraussBot类有一个connectSock方法,但实际上您将connectSock的定义嵌套在__init__方法中。在

在编辑器中打开“showwhitespace”查看问题。可能有一个“将制表符转换为空格”选项可以用来自动修复它。运行带有-tt选项的Python将使Python在发生类似情况时通知您。在

另外,您还需要实际创建一个StraussBot的实例,而不仅仅是将straussbot设置为类本身:straussbot = StraussBot()。在

你被这里的错误搞糊涂了。因为没有实例,self.Ssock会得到一个AttributeError。在

您只在此处创建了对类的引用:

straussbot = StraussBot

您需要调用类来生成实例:

^{pr2}$

您还可以混合制表符和空格:

tabs in source

注意第5行到第9行是如何在缩进中有行的,但其余的都有点?这些是制表符,Python将其视为8个空格。因此,您的connectSock方法在__init__的内缩进,而不是{}上的方法。在

你必须坚持使用制表符或空格。Python的styleguide强烈建议您只使用空格。在

您忘记实例化类StraussBot的对象。在

straussbot = StraussBot

只需指定名称straussbot来引用类StraussBot。把那条线改成

^{pr2}$

以实际创建类的实例。然后,您可以按预期在该实例上调用connectSock方法。在

相关问题 更多 >