通过--py2标志难以理解mypy中str()的行为

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

我有一段代码

1. b = u'\xe6' #type: unicode
2. c = str(b) #type: str
3. d = c #type: str

我在mypy中使用python 2标志运行它。

我的期望是第2行应该有错误。str(b)返回类型unicode,而c的期望类型为str,因此应该存在类型不兼容的问题。但是没有抛出错误。

另一方面,如果我明确地做过

1. b = u'\xe6' #type: unicode
2. c = str(b) #type: unicode
3. d = c #type: str

然后第3行出现错误,说明无法将unicode分配给str,这在某种程度上是可以预期的。

所以问题在于我对str()的理解,str()是否应该返回与其输入相同的类型?还是隐式将所有内容都强制转换为str,如果是,则第二个示例中的第2行而不是第3行不应有错误。

根据当前行为,str()采用为其分配的变量的类型。

python python-2.7 static-analysis typechecking mypy
1个回答
0
投票

str返回类型为str的对象。在极少数情况下,它可能返回str子类的实例,但绝对不会返回您传入的任何类型的对象。

第2行通过代码段2中的类型检查,因为mypy的specific special case表示str与Python 2上的unicode兼容,反之亦然。

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