如何捕获缩进错误

11 投票
3 回答
2596 浏览
提问于 2025-04-17 10:31

首先,我对代码缩进不规范的问题并不在意,我大概知道这个异常是怎么回事。

我想问一下,是否有办法在代码中用try/except块来捕捉IndentationError(缩进错误)?比如说,我在为一个别人写的函数写测试。我想在try/except块中运行它,并处理所有可能出现的警告。我知道这不是最好的例子,但这是我想到的第一个例子。请不要关注这个例子本身,而是关注问题。

我们来看一下代码:

try:
    f()
except IndentationError:
    print "Error"

print "Finished"

这个函数:

def f():
  print "External function"

结果是:

External function
Finished

这我能理解,因为外部函数的缩进是统一的。

但是当函数看起来像这样:

def f():
  print "External function"
     print "with bad indentation"

这个异常就没有被处理:

    print "with bad indentation"
    ^
IndentationError: unexpected indent

有没有办法做到这一点?我想这可能和编译有关,反正我看不到有什么办法可以捕捉到这个错误。except IndentationError有意义吗?

3 个回答

5

你可以使用一个叫做 pylint 的工具,它会分析你的代码模块,告诉你哪些地方缩进不对,还有其他很多错误。

9

IndentationError 是在模块编译时出现的错误。当你第一次导入一个模块时,它会被编译,这时候你可以捕捉到这个错误。但是,如果你在同一个模块里使用 try/except 来捕捉这个错误,那就不行了,因为出现 IndentationError 时,Python 根本无法完成模块的编译,这样模块里的代码就不会被执行。

15

是的,这个是可以做到的。不过,被测试的函数需要放在一个不同的模块里:

# test1.py
try:
    import test2
except IndentationError as ex:
    print ex

# test2.py
def f():
    pass
        pass # error

运行时,这样可以正确捕获异常。值得注意的是,这个检查是针对整个模块一次性进行的;我不太确定有没有办法让检查更细致一些。

撰写回答