gpt4 book ai didi

python - Python3 输入和 mypy 的意外可选行为

转载 作者:行者123 更新时间:2023-12-04 08:10:07 24 4
gpt4 key购买 nike

我刚开始使用 typingmypy .
使用下面的代码块,mypy提示ret无法分配 None因为Incompatible types in assignment (expression has type "None", variable has type "Tuple[Connection, Cursor]") (python-mypy) .

    def __connect__(self) -> Tuple[Optional[Tuple[Conn, Cursor]], Status]:
"""Establish DB connection."""
if self.db_type is DB_Type.SQLITE:
conn = sqlite3.connect(self.db_name)
cur = conn.cursor()
ret, status = (conn, cur), Status(Code.OK)
else:
ret, status = None, self.INVALID_STATUS # mypy error
return ret, status
但我将返回类型签名定义为 Optional[Tuple[Connection, Cursor] , 而不是 Tuple[Connection, Cursor] .所以要么我忽略了一些东西,要么 mypy 中存在限制静态分析,可能有一些解决方法......非常感谢指针。

最佳答案

mypy通过使用第一个赋值的类型作为变量的类型来处理无类型变量。因此,对具有不同类型的同一个无类型变量进行两次赋值被认为是类型不匹配。例如:

$ cat test.py 
foo, bar = 1, 2
foo, bar = None, 2
$ mypy test.py
test.py:2: error: Incompatible types in assignment (expression has type "None", variable has type "int") [assignment]
Found 1 error in 1 file (checked 1 source file)
您的代码中也出现了同样的问题,尽管不太明显: ret被分配类型 Tuple[Connection, Cursor] ,但另一个分支正在分配 Noneret .返回类型无关紧要。
一种解决方法是设置显式类型 ret: Optional[Tuple[Connection, Cursor]] .

关于python - Python3 输入和 mypy 的意外可选行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66016659/

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