我有一个配置已加载到
dict
中。它包含一个整数config["logging"]["backup_count"]
。然而,type(config["logging"]["backup_count"])
返回object
。因此,当我将其传递到以下内容时:
TimedRotatingFileHandler(log_file, backupCount=config["logging"]["backup_count"], when="midnight", interval=1)
mypy 抱怨我试图将
object
放在需要 int
的地方。当然,这可以通过添加一些类型转换来解决:
TimedRotatingFileHandler(log_file, backupCount=int(str(config["logging"]["backup_count"])), when="midnight", interval=1)
但这看起来很笨拙。我应该这样做吗?
我是 mypy 的新手,正在使用 python 进行输入。我想知道处理此类事情的正确协议。具体来说,我应该进行 -to-str-to-int 转换还是其他操作?
编辑:我应该使用
TypedDict
吗?例如,如果我的字典是从 .toml
文件中读取的,是否有一种简单的方法可以通过正确的输入来创建 TypedDict
(我知道配置类型应该提前)?
您的问题只是因为类型检查问题。如果
TimedRotatingFileHandler.__init__()
可以接受 object
而不是 int
,那么应该没问题。您可能可以忽略类型检查问题。它们适用于名为 actually 的方法/函数不接受 object
类型的对象并导致 TypeError
的情况。如果这只是类型注释问题,我建议您忽略它或将注释更改为类似这样的内容(假设 TimedRotatingFileHandler
是您自己的类,因此您可以更改它):
def __init__(self, logfile: File, backupCount: int|object, *args, **kwargs):
# code here