【问题标题】:TypeError: __init__() takes from 1 to 6 positional arguments but 7 were givenTypeError: __init__() 接受 1 到 6 个位置参数,但给出了 7 个
【发布时间】:2021-01-22 12:00:39
【问题描述】:

我在我的脚本中使用了多线程概念。但是我在运行脚本时遇到了上述错误。我在 python 2.7 中使用了相同的代码,它运行良好,但在 python 3.6 中它给了我错误。你能帮我解决这个问题吗?

我正在使用的代码-

class ThreadWithReturnValue(Thread):
    def __init__(self, group=None, target=None, name=None,
                 args=(), kwargs={}, Verbose=None):
        Thread.__init__(self, group, target, name, args, kwargs, Verbose)
        self._return = None
    def run(self):
        if self._Thread__target is not None:
            self._return = self._Thread__target(*self._Thread__args,
                                                **self._Thread__kwargs)
    def join(self):
        Thread.join(self)
        return self._return

可能是python 3.6中的语法不同请帮我解决这个错误。

错误:

Traceback (most recent call last):
  File "/app/HTA/Scripts/Python/HTA_Consump_Layer_Procs.py", line 588, in <module>
    main()
  File "/app/HTA/Scripts/Python/HTA_Consump_Layer_Procs.py", line 585, in main
    parallel_Execution()
  File "/app/HTA/Scripts/Python/HTA_Consump_Layer_Procs.py", line 395, in parallel_Execution
    p2 = ThreadWithReturnValue(target = partial(parallel_temp2, unique_exec_seq, df ))
  File "/app/HTA/Scripts/Python/HTA_Consump_Layer_Procs.py", line 365, in __init__
    Thread.__init__(self, group, target, name, args, kwargs, Verbose)
TypeError: __init__() takes from 1 to 6 positional arguments but 7 were given

【问题讨论】:

  • @toRex 出现此错误 - AttributeError: 'ThreadWithReturnValue' 对象没有属性 '_Thread__target'
  • @toRex 我做了这个 - 类 ThreadWithReturnValue(Thread): def __init__(self, group=None, target=None, name=None, args=(), kwargs=None, *, daemon= None): Thread.__init__(self, group, target, name, args, kwargs, daemon=daemon) self._return = None def run(self): if self._Thread__target is not None: self._return = self._Thread__target( *self._Thread__args, **self._Thread__kwargs) def join(self): Thread.join(self) return self._return

标签: python-3.x multithreading oop python-multithreading


【解决方案1】:

好吧,我在Thread.__init__() 中尝试了忽略 Verbose,然后它可以正常工作。找到我的演示代码和输出。之前的 Python&lt;3 在 Thread 中使用了 Verbose,但在 3.x+ 之后忽略了详细信息。

from threading import Thread

def foo(bar):
    print('hello {0}'.format(bar))
    return "foo"

class ThreadWithReturnValue(Thread):
    def __init__(self, group=None, target=None, name=None, args=(), kwargs={}, Verbose=None):
        Thread.__init__(self, group, target, name, args, kwargs)
        self._return = None

    def run(self):
        if self._target is not None:
            self._return = self._target(*self._args, **self._kwargs)

    def join(self, *args):
        Thread.join(self, *args)
        return self._return


twrv = ThreadWithReturnValue(target=foo, args=('world!',))
twrv.start()
print(twrv.join())

# Output
# hello world!
# foo

【讨论】:

  • 类 ThreadWithReturnValue(Thread): def __init__(self, group=None, target=None, name=None, args=(), kwargs={}, Verbose=None): Thread.__init__( self, group, target, name, args, kwargs) self._return = None def run(self): if self._Thread__target is not None: self._return = self._Thread__target(*self._Thread__args, **self._Thread__kwargs) def join(self, *args): Thread.join(self, *args) return self._return
  • 我做了上面的,但得到了错误。
  • 你的python版本是多少?
  • 我正在使用 python 3.6
  • Traceback(最近一次调用最后):文件“/usr/lib64/python3.6/threading.py”,第 916 行,在 _bootstrap_inner self.run() 文件“/app/HTA/Scripts /Python/HTA_Consump_Layer_Procs.py",第 368 行,运行中如果 self._Thread__target 不是 None:AttributeError: 'ThreadWithReturnValue' 对象没有属性 '_Thread__target'
猜你喜欢
  • 1970-01-01
  • 2020-11-22
  • 1970-01-01
  • 2015-07-13
  • 2017-04-22
  • 2018-06-21
  • 2014-11-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多