当我尝试处理以下代码中除部分内容之外的 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 部分。
我想知道如何处理此类异常。
答案 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")