按照文档here以及此answer和this中的答案,我有此代码
source = r'C:\path\to\file\test.py'
with tokenize.open(source) as f:
readFile = f.read()
class Py2Neko(ast.NodeVisitor):
def generic_visit(self, node):
#print(type(node).__name__)
ast.NodeVisitor.generic_visit(self, node)
def visit_Assign(self, node):
try:
print("Assign :", node.value.id, node.lineno, node.col_offset)
except AttributeError:
print('Attribute Error:', node.lineno, node.col_offset)
ast.NodeVisitor.generic_visit(self, node)
node = ast.parse(file_contents)
v = Py2Neko()
v.visit(node)
例如,当我在这个python文件上运行它时:
import os
def __init__(self, latitude, longitude, depth, magnitude):
self.latitude = latitude
self.longitude = longitude
self.depth = depth
self.magnitude = magnitude
def __str__(self):
depth = self.depth
if depth == -1:
depth = 'unknown'
magnitude = self.magnitude
if magnitude == -1:
depth = 'unknown'
我得到了这个输出:
Assign : latitude 9 1
Assign : longitude 10 1
Assign : depth 11 1
Assign : magnitude 12 1
Attribute Error: 16 1
Attribute Error: 18 2
Attribute Error: 20 1
Attribute Error: 22 2
我不明白为什么(例如)第16行第2列depth = self.depth
在我尝试node.value.id
时引发属性错误。
我感兴趣的是能够为每个assign语句获取值id ,包括上面发生属性错误的情况。