擅长:python、mysql、java
<p>Mypy知道<a href="https://mypy.readthedocs.io/en/latest/common_issues.html#python-version-and-system-platform-checks" rel="nofollow noreferrer">how to handle Python version checks</a>,您可以使用条件<em>类型别名</em>为正确的Python版本选择正确的类型:</p>
<pre><code>if sys.version_info[0] >= 3:
TryNode = ast.Try
else:
TryNode = ast.TryFinally
class Visitor(ast.NodeVisitor):
def visit_Try(self, node): # type: (TryNode) -> None
# ...
visit_TryFinally = visit_Try # python 2 compatible
</code></pre>
<p>通过将代码放在<a href="https://docs.python.org/3/library/typing.html#typing.TYPE_CHECKING" rel="nofollow noreferrer">^{<cd2>} test</a>中,可以进一步节省<code>if sys.version_info</code>测试的运行时开销。你知道吗</p>
<p>另请注意:如果要在Python3中处理<code>ast.Try</code>以跟踪<code>finally:</code>和<code>except ...:</code>语句的<code>try</code>组件,则需要在Python2中同时处理<code>ast.TryFinally</code>和<code>ast.TryExcept</code>,就像在Python2.5之前一样,只能在一个语句中使用<code>try...finally</code><em>或</em><code>try...except</code>。你知道吗</p>