Pau*_*tte 5 python typing mypy
一直在使用以下代码
import yaml
try:
filterwarnings(yaml.YAMLLoadWarning)
except AttributeError:
pass
Run Code Online (Sandbox Code Playgroud)
但是当我今天尝试运行 mypy 时,我得到“模块没有属性 YAMLLoadWarning”。这在某些版本的 python 上是正确的。有更好的方法来写这个吗?
编辑:
为了更清楚一点,我知道如何忽略错误(并捕获与 python 3.6 版本的 pyyaml 相关的异常,不包括该异常)。我的问题更多是关于使用解析器。考虑这些例子——
我知道如果你有一个返回更具体类型的函数
def bad(a: Optional[int]) -> int:
return a # Incompatible return value type (got "Optional[int]", expected "int")
Run Code Online (Sandbox Code Playgroud)
您可以使用分支强制仅返回正确的类型,并且解析器会注意到
def good(a: Optional[int]) -> int:
if a:
return a
return 0
Run Code Online (Sandbox Code Playgroud)
那么,在使用 try/catch 语句处理错误情况的情况下,是否有一种方法可以构造此语句,以便解析器意识到属性错误已被处理?
def exception_branch(a: Optional[str])-> list:
try:
return a.split() # Item "None" of "Optional[str]" has no attribute "split"
except:
return []
Run Code Online (Sandbox Code Playgroud)
小智 1
那么,在使用 try/catch 语句处理错误情况的情况下,是否有一种方法可以构造此语句,以便解析器意识到属性错误已被处理?
不,恐怕没有。问题是catch AttributeError没有表明异常来自哪里。所以如果你有
try:
print(foo.barr)
return a.split()
except AttributeError:
return []
Run Code Online (Sandbox Code Playgroud)
a类型检查器可以忽略可以存在的事实None,但它也必须忽略拼写错误并且对象中bar没有属性的事实。另请参阅此处。barrfoo
| 归档时间: |
|
| 查看次数: |
1639 次 |
| 最近记录: |