![](/img/trans.png)
[英]TypeError: __init__() got an unexpected keyword argument 'log_dir'
[英]TypeError: __init__() got an unexpected keyword argument 'dir'
我嘗試啟動一個計時器來做一些文件歸檔工作。 代碼是這樣的:
from threading import Timer
message_archive_dir = "achivedir"
message_archive_format = "zip"
archive_timer = Timer(86400, messageachiver.archive, dir = message_archive_dir, fmt = message_archive_format)
archive_timer.start()
class messageachiver(object):
def __init__(self, **kwargs):
self.message_archive_dir = dir
self.message_archive_format = fmt
def archive(self):
print("message_archive_dir is " + self.message_archive_dir)
print("message_archive_format is " + self.message_archive_format)
print("Archiving trade messages")
我收到以下錯誤:
Traceback (most recent call last):
File "sa_listener.py", line 43, in <module>
archive_timer = Timer(archive_interval, messageachiver.archive, dir = message_archive_dir, fmt = message_archive_format)
TypeError: __init__() got an unexpected keyword argument 'dir'
我不確定為什么 _ init _ 不接受 **kwargs。
這個特定的初始化錯誤是因為您將多個變量傳遞給計時器 class。
在這一行中: Timer(86400, messageachiver.archive, dir = message_archive_dir, fmt = message_archive_format)
您將歸檔 function、dir 變量和 fmt 變量傳遞給 TIMER,而不是傳遞給 messageachiver ZA2F2ED4F8EBC2CBB1DDZABC40。 Timer 沒有用於 dir 和 fmt 的命名變量。
所以該行應該是Timer(86400, messageachiver.archive)
不過,這只能部分解決您的問題。 因為您實際上從未使用您需要的變量初始化 class。 因此,在調用計時器之前,您需要通過添加mymessageachiver = messageachiver(dir = message_archive_dir, fmt = message_archive_format)
來初始化 class messageachiver
您還需要在嘗試初始化之前放置 class 定義。 最終代碼:
from threading import Timer
class messageachiver(object):
def __init__(self, **kwargs):
self.message_archive_dir = kwargs['dir']
self.message_archive_format = kwargs['fmt']
def archive(self):
print("message_archive_dir is " + self.message_archive_dir)
print("message_archive_format is " + self.message_archive_format)
print("Archiving trade messages")
message_archive_dir = "achivedir"
message_archive_format = "zip"
mymessageachiver = messageachiver(dir = message_archive_dir, fmt = message_archive_format)
# That's a huge wait time, try something like 10 for a smaller wait during testing.
archive_timer = Timer(86400, mymessageachiver.archive)
archive_timer.start()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.