gpt4 book ai didi

python - 在 mypy 中记录处理程序名称注释

转载 作者:太空宇宙 更新时间:2023-11-04 05:02:50 24 4
gpt4 key购买 nike

我正在尝试在 Python 3 中使用 mypy 注释我的日志记录模块,但是,我在注释 namer 函数时遇到问题:

import logging

def _namer(name: str) -> str:
return name + '.gz'

def get_logger(file_name: str, level: str) -> logging.Logger:
logger = logging.getLogger(__name__)
handler = TimedRotatingFileHandler(file_name, backupCount=30, when='midnight')

handler.namer = _namer
return logger

当我运行 mypy 时,当我将 _namer 分配给 handler.namer 时出现此错误:

error: Incompatible types in assignment (expression has type Callable[[str], str], variable has type "Optional[Callable[[str], None]]")

知道我应该如何注释 _namer 以便 mypy 不会提示它吗?

最佳答案

看来这是mypy的一个bug!或者更准确地说,这是 Typeshed 中的错误,不同类型检查器(包括 mypy)使用的各种库的类型 stub 概要。

在查看文档和 source code of logging.handler 之后,看来 handler.namer 属性的类型应该是 Optional[Callable[[str], str]],这与您的代码匹配。

但是,如果我们 check typeshed ,我们可以看到它被赋予了 Optional[Callable[[str], None]] 类型。这对我来说似乎是一个简单的疏忽。

我建议在 typeshed 存储库中提出带有修复的拉取请求。在那之前,您可以通过将 # type: ignore 注释添加到作业所在的行来使 mypy 静音。

关于python - 在 mypy 中记录处理程序名称注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45292635/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com