如何捕获缩进错误
首先,我对代码缩进不规范的问题并不在意,我大概知道这个异常是怎么回事。
我想问一下,是否有办法在代码中用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
运行时,这样可以正确捕获异常。值得注意的是,这个检查是针对整个模块一次性进行的;我不太确定有没有办法让检查更细致一些。