在 mypy 中记录处理程序名称注释
Logging handler namer annotations in mypy
我正在尝试使用 Python 3 中的 mypy 注释我的日志记录模块,但是,我在注释命名函数时遇到了问题:
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。
查看文档和 source code of logging.handler 后,handler.namer
属性的类型似乎应该是 Optional[Callable[[str], str]]
,这与您的代码相符。
然而,如果我们 check typeshed,我们可以看到它被赋予了 Optional[Callable[[str], None]]
类型。这对我来说似乎是一个简单的疏忽。
我建议在 typeshed 存储库中提出带有修复程序的拉取请求。在那之前,您可以通过在作业的那一行添加 # type: ignore
注释来使 mypy 静音。
我正在尝试使用 Python 3 中的 mypy 注释我的日志记录模块,但是,我在注释命名函数时遇到了问题:
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。
查看文档和 source code of logging.handler 后,handler.namer
属性的类型似乎应该是 Optional[Callable[[str], str]]
,这与您的代码相符。
然而,如果我们 check typeshed,我们可以看到它被赋予了 Optional[Callable[[str], None]]
类型。这对我来说似乎是一个简单的疏忽。
我建议在 typeshed 存储库中提出带有修复程序的拉取请求。在那之前,您可以通过在作业的那一行添加 # type: ignore
注释来使 mypy 静音。