在代码中,我们可以使用 astroid
来检查代码并自动推断变量类型。但是,当我们在代码中使用 structlog.logger
来创建日志记录器时,astroid
无法自动推断其类型,产生了“astroid无法推断structlog”的错误。
为了解决这个问题,我们可以手动指定 structlog.logger
的类型。我们可以使用 astroid
的 inference_tip
和 register
函数来完成这个任务。具体来说,我们可以在代码中添加以下代码:
import astroid
logger_inference_tip = """
def structlog_logger_tip(node):
from structlog import ReturnLogger
return [{'type': 'instance', 'value': ReturnLogger()}]
"""
astroid.inference_tip.register(
astroid.parse(string=logger_inference_tip),
astroid.inference.infer_call_result,
astroid.matcher.matches_name('structlog.logger'),
)
这将向 astroid
提供一个手动推断 structlog.logger
类型的示例。现在,astroid
将能够正常地推断任何 structlog.logger
类型的变量。