【发布时间】:2019-05-28 04:35:35
【问题描述】:
我正在尝试遍历 Python 源代码中的所有字符串文字,同时能够分辨出每个字符串文字的类型。
不幸的是,正如您在此示例中看到的那样,ast.parse 不起作用:
[node.value.s for node in ast.parse('\'x\'; u\'x\'; b\'x\'; "x"; u"x"; b"x"').body]
输出是:
['x', 'x', b'x', 'x', 'x', b'x']
意味着我无法区分 '' 和 u'' 文字,或 '' 和 "" 等。
我怎样才能在解析 Python 源代码的同时保持原始文字与所写的完全一致?
有内置的方法吗?
【问题讨论】:
-
根据
u前缀在 Python 3 下实现的方式,如PEP-0414 中所述,内部表示实际上没有任何变化,因此无论是否包含原始语法,您想要什么u与否,不会从astapi 表达或传达出去。 -
@metatoaster:是的,但是有不同的 API 吗?还是人们为此编写自己的词法分析器/解析器?
标签: python parsing abstract-syntax-tree literals string-length