Python AST分配节点属性错误

时间:2016-06-02 09:12:50

标签: python-3.x parsing abstract-syntax-tree

按照文档here以及此answerthis中的答案,我有此代码

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 ,包括上面发生属性错误的情况。

0 个答案:

没有答案