如何捕获IndentationError

时间:2012-01-18 14:25:46

标签: python exception-handling indentation

首先 - 我对错误的代码没有问题,我知道这个异常是如何工作的。

我问,如果有任何方法在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 个答案:

答案 0 :(得分:12)

是的,这可以做到。但是,被测功能必须存在于不同的模块中:

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

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

运行时,这会正确捕获异常。在整个模块上立即进行检查是没有价值的;我不确定是否有办法让它更精细。

答案 1 :(得分:6)

编译模块时会引发

IndentationError。导入模块时,可以捕获它,因为模块将在首次导入时编译。你不能在包含try/except的同一个模块中捕获它,因为使用IndentationError,Python将无法完成编译模块,也没有代码在模块中将运行。

答案 2 :(得分:5)

您可以使用pylint等工具来分析您的模块并报告错误缩进以及许多其他错误。