如何在 MyPy 中声明过程/函数混合

问题描述 投票:0回答:1

我有一个函数,它可能返回一个值(那么它必须是一个 int)或表现得像一个过程(即它根本不调用 return,然后有效地返回

None
)。 您可能已经猜到了,它就是这个众所周知的模式中的
main()
函数:

if __name__ == '__main__':
    import sys
    sys.exit(main(sys.argv))

函数

sys.exit()
就是为此准备的,它同样接受
int
None

某些

main()
函数只是执行操作并在没有显式
return
的情况下终止,其他
return
则显式
int
。 我想在常量类型中声明这一点,以便将我的
main()
从“不返回任何内容”更改为“返回退出代码”并不意味着我必须调整类型声明。

我的尝试:

def main(argv: List[str]) -> Optional[int]:
    print_something()

(然后 MyPy 抱怨缺少

return
语句。)

def main(argv: List[str]) -> Union[int, None]:
    print_something()

(同上。)

def main(argv: List[str]) -> Optional[int]:
    print_something()
    return

(“错误:预期返回值”:rage:)

def main(argv: List[str]) -> Optional[int]:
    print_something()
    return None

(噢,来吧。但是有效,是的。我对最终无用的

return None
不满意。我认为
Optional
已经明确表示可能不会返回任何内容。)

def main(argv: List[str]) -> Any:
    print_something()

(当然可以,但是使用

Any
太笼统了。静态类型检查器不会意外返回字符串。)

有什么我还没想到的方法可以实现我想要的吗?

python python-typing mypy
1个回答
0
投票

(噢,来吧。但是有效,是的。我对最终无用的

return None
不满意。我认为可选已经明确表明可能不会返回任何内容。)

我认为

Optional
清楚地表明它可能会返回可选值。 IE。
int
。 我相信你还是要输入预期的回报值。 在这种情况下,它将是
None

关于

None
作为返回值有一个很好的讨论 here

另请参阅 mypy 文档,了解严格的可选类型和无检查

© www.soinside.com 2019 - 2024. All rights reserved.