TypeError:\uuuu init\uuuuuuuuuu()获得意外的关键字参数“dir”

2024-10-03 17:25:43 发布

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

我试着启动一个计时器来做一些文件归档工作。代码如下所示:

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


Tags: selfformatmessageinitisdefdirkwargs
1条回答
网友
1楼 · 发布于 2024-10-03 17:25:43

这个特定的init错误是因为您正在向timer类传递多个变量

在这方面: Timer(86400, messageachiver.archive, dir = message_archive_dir, fmt = message_archive_format) 您正在将存档函数、dir变量和fmt变量传递给TIMER,而不是messageachiver类。计时器没有dir和fmt的命名变量

所以这行应该是Timer(86400, messageachiver.archive)

不过,这只能部分解决您的问题。因为你从来没有用你需要的变量来初始化这个类。因此,在调用timer之前,需要通过添加mymessageachiver = messageachiver(dir = message_archive_dir, fmt = message_archive_format)来初始化messageachiver类

您还需要将类定义放在尝试初始化它之前。 最终代码:

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()

相关问题 更多 >