在Python代码中查找除法运算符的所有用法

4

我希望能够找到我Python代码中使用除法运算符/的所有实例。我的第一反应是使用正则表达式。该表达式需要过滤掉/的非除法用途,即路径名。我想到的最好的方法是[ A-z0-9_\)]/[ A-z0-9_\(]。这将在以下情况下找到除法运算符:

foo/bar
foo / bar
foo/(bar*baz)
foo / 10
1/2
etc...

但是也要匹配像"path/to/my/file"中的/

有没有人能想出更好的正则表达式?或者,是否有非正则表达式的方法来查找除法符号?

编辑:澄清一下:

我不一定需要使用python来完成这个任务。我只是想知道除法运算符的位置,以便可以手动/视觉地检查它们。我可以忽略注释代码。


抱歉,您是指使用Python读取包含Python代码的文本文件吗? - KuboMD
2
不要使用正则表达式来实现。你需要对代码进行适当的解析。看看astroid模块,它可以为你找到所有带有除法运算符的AST节点。 - BoarGules
1
为了让事情变得复杂:在分割线(或者任何一个Python代码行)中可能会有换行符。那么整数除法//又是怎样的呢? - 9769953
你可以在Python 2中使用“-3”模式运行代码,以便在这些除法情况下得到警告。 - Jean-François Fabre
另外,您想使用Python完成这个任务吗?还是只用正则表达式,例如在代码编辑器中? - tobias_k
显示剩余2条评论
1个回答

6
你可以使用ast模块将Python代码解析成抽象语法树, 然后遍历这棵树来查找除法表达式所在的行号。
example = """c = 50
b = 100
a = c / b
print(a)
print(a * 50)
print(a / 2)
print("hello")"""

import ast
tree = ast.parse(example)
last_lineno = None
for node in ast.walk(tree):
    # Not all nodes in the AST have line numbers, remember latest one
    if hasattr(node, "lineno"):
        last_lineno = node.lineno

    # If this is a division expression, then show the latest line number
    if isinstance(node, ast.Div):
        print(last_lineno)

2
ast.FloorDiv 用于 // - tobias_k

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接