簡體   English   中英

TypeError: __init__() 得到了一個意外的關鍵字參數 '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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM