如何将列表作为参数传递给函数threading.Timer(...)?请参阅以下代码.我想传递nb []作为参数
nb=['192.168.1.2', '192.168.1.3', '192.168.1.4']
ping_thread = threading.Timer(12.0, pingstarter, nb,)
ping_thread.start()
Run Code Online (Sandbox Code Playgroud)
pingstarter是一个函数并将参数作为列表.
我收到以下错误.如果需要,我可以发布所有代码.
谢谢.
Exception in thread Thread-1:
Traceback (most recent call last):
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/threading.py", line 522, in __bootstrap_inner
self.run()
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/threading.py", line 726, in run
self.function(*self.args, **self.kwargs)
TypeError: pingstarter() takes exactly 1 argument (3 given)
Run Code Online (Sandbox Code Playgroud)
问题很简单:你需要列表参数传递nb到threading.Timer()作为一个序列的单个元素(我通常使用一个元组,注意后面的逗号内部括号):
threading.Timer(12.0, pingstarter, (nb,))
Run Code Online (Sandbox Code Playgroud)
......或者,一个清单
threading.Timer(12.0, pingstarter, [nb])
Run Code Online (Sandbox Code Playgroud)
为什么?好吧,threading.Timer()接受一系列参数和一个dict关键字参数.有关更多信息,请参阅有关参数解包的文档.
您的列表nb被解释为参数序列,而不是单个参数,因此pingstarter最终会被调用为:
pingstarter('192.168.1.2', '192.168.1.3', '192.168.1.4')
Run Code Online (Sandbox Code Playgroud)
...代替:
pingstarter(['192.168.1.2', '192.168.1.3', '192.168.1.4'])
Run Code Online (Sandbox Code Playgroud)
因此,您需要将其包装在另一个序列中.
| 归档时间: |
|
| 查看次数: |
7920 次 |
| 最近记录: |