使用ast module,我遇到了一个奇怪的问题:
密码
import ast
from _ast import Try
code = """
def my_add(a, b):
try:
return a + b
except TypeError:
return a + b
"""
class Visitor(ast.NodeVisitor):
def visit_Try(self, node: Try):
print(node)
return node
Visitor().visit(ast.parse(code))
输出
<ast.Try object at 0xXXX>
在这里,Visitor().visit()
(ast.NodeVisitor子类)打印<ast.Try object at 0xXXX>
,但如果我在Visitor
类中添加visit_FunctionDef
方法:
密码 with visit_FunctionDef
import ast
from _ast import Try
code = """
def my_add(a, b):
try:
return a + b
except TypeError:
return a + b
"""
class Visitor(ast.NodeVisitor):
def visit_Try(self, node: Try):
print(node)
return node
def visit_FunctionDef(self, node: ast.FunctionDef):
print(node.name)
return node
Visitor().visit(ast.parse(code))
输出
my_add
Expected 输出
my_add
<ast.Try object at 0xXXX>
现在唯一的打印行是my_add
,我希望有两行,my_add
,然后是<ast.Try object at 0xXXX>
.
我判断了一下,visit_Try
方法似乎还可以,因为它似乎尊重我在这里读到的内容:class ast.NodeVisitor.visit.它也没有遭到反对.
我不理解这种行为.如何获得所需的输出?
Python3.9和3.10中的行为相同.