Python:断言错误,“not called”

2024-09-27 21:27:24 发布

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

我发现很难处理程序的以下错误,我将非常感谢一些输入。在

该程序的目标是执行SMTP扫描。用户输入目标IP地址、用户名、密码和要分配给扫描进程的线程数。在

Traceback (most recent call last):
 File "/home/user/Desktop/darkSMTP.py", line 133, in <module>
    thread = myThread(i, "Thread " + str(i), i);    
  File "/home/user/Desktop/darkSMTP.py", line 100, in __init__
    self.name = name
  File "/usr/lib/python2.6/threading.py", line 669, in name
    assert self.__initialized, "Thread.__init__() not called"
AssertionError: Thread.__init__() not called

代码如下:

^{pr2}$

谢谢


Tags: nameinpyself目标homeinitline
2条回答

在尝试设置名称之前,必须调用__init__()。线程名称是一个属性,而不是普通属性,它的setter检查对象是否已经初始化。另外,您不需要手动指定名称,因为Threading.__init__已经有name参数。所以:

class myThread(threading.Thread):
   def __init__(self, threadID, name, counter):
       super(myThread, self).__init__(name=name)
       self.threadID = threadID
       self.counter = counter
   #...

myThread类的构造函数必须是:

class myThread (threading.Thread):
    def __init__(self, threadID, name, counter):
        threading.Thread.__init__(self, name=name)
        self.threadID = threadID
        self.name = name
        self.counter = counter
    def run(self):
        print("[+] Starting " + self.name)
        connect(self.name, self.counter, eachThread, self.threadID)

请注意threading.Thread.__init__(self, name=name)后的threading.Thread.__init__(self, name=name)。在尝试设置名称之前,必须调用基类的构造函数。在

相关问题 更多 >

    热门问题