尝试处理IndentationError异常

时间:2019-07-11 11:23:58

标签: python python-3.x exception

当我尝试处理以下代码中除部分内容之外的 IndentatioError 时。

try:
   def Test():
   print("Test Function")
except IndentationError:
   print("Exception raised")

我在输出中出现此错误:

File "C:/Users/PycharmProjects/py1/Exception.py", line 3
    print("Test Function")
        ^
IndentationError: expected an indented block

Process finished with exit code 1

我接受输出中的 except 部分。

我想知道如何处理此类异常。

4 个答案:

答案 0 :(得分:2)

不能。

IndentationError在““ compile”“时间引发。 try-except仅能处理在运行时引发的异常。

重点是什么? IndentationError源自格式错误的代码。并不是像您可以在except块中重新设置代码格式,重新编译并重新执行它(从理论上讲,您可以非常复杂)。

答案 1 :(得分:0)

在执行程序编译器之前,检查您的代码是否具有适当的缩进,如果没有,则引发IndentationError。因此,一般而言,您在代码验证阶段获得IndentationError 之前的代码,except是代码的try: def Test(): print("Test Function") //here's the missing tab, that compiler points to except IndentationError: print("Exception raised") 部分,而不是执行部分。 因此,解决该问题的方法就是简单地按如下所示进行适当的缩进:

IndentationError

总结一下-如果try-except的{​​{1}}构造没有用。

答案 2 :(得分:0)

您不能以这种方式排除缩进错误,因为它是在代码解析时引发的,而不是在运行时引发的。 try..except块是在该时间点尚不存在的运行时构造,因此它无法执行任何操作。

如果您只是出于好奇而只想捕获该异常,则可以通过在引发代码为compiled explicitly时编写适当的异常处理方式来编写代码:

>>> try:
...     compile("""def foo():\nprint('bar')""", '<string>', 'exec')
... except IndentationError:
...     print('baz')
...     
baz

正如DeepSpace已经说过的那样,除了这样的错误几乎没有意义,因为在运行时没有明智的方法来修复这种程序状态。

答案 3 :(得分:0)

只要解析器发现不遵循缩进规则的源代码,就会发生IndentationError。 我们可以在导入模块时捕获它。由于该模块将在首次导入时进行编译。您无法将其捕获在包含try / except块的模块中,因为只有这样,Python才能完成该模块的编译,并且模块中的任何代码都不会运行。

问题在于代码缩进。因为它在同一模块中,所以这会停止执行python脚本。

try:
   def Test():
      print("Test Function")
except IndentationError:
   print("Exception raised")