Попробуйте обработать исключение IndentationError - PullRequest
0 голосов
/ 11 июля 2019

Когда я пытаюсь обработать IndentatioError in, за исключением части в следующем коде ..

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

Iпринять вывод , за исключением в выводе.

Я хочу знать, как я могу обработать такой тип исключения.

Ответы [ 4 ]

2 голосов
/ 11 июля 2019

Вы не можете.

IndentationError повышается во время «компиляции».try-except может обрабатывать только те исключения, которые возникают во время выполнения.

В чем даже смысл?IndentationError исходит из плохо отформатированного кода.Это не значит, что вы можете переформатировать код в блоке except, перекомпилировать его и выполнить повторно (ну, теоретически, это просто очень сложно).

0 голосов
/ 11 июля 2019

IndentationError возникает каждый раз, когда анализатор находит исходный код, который не следует правилам отступа. Мы можем поймать его при импорте модуля. Поскольку модуль будет скомпилирован при первом импорте.Вы не можете перехватить его в том же модуле, который содержит блок try / исключением, потому что за этим исключением Python не сможет завершить компиляцию модуля, и никакой код в модуле не будет запущен.

Проблема связана с отступом кода.Это останавливает выполнение скрипта python, потому что он находится в том же модуле.

try:
   def Test():
      print("Test Function")
except IndentationError:
   print("Exception raised")
0 голосов
/ 11 июля 2019

Вы не можете, кроме ошибки отступа в пути, потому что она возникает при разборе кода, а не при его запуске. Блок try..except представляет собой конструкцию времени выполнения, которой в данный момент не существует, поэтому он пока ничего не может сделать.

Если вы просто заинтересованы в том, чтобы поймать это исключение ради любопытства, вы можете добиться этого, написав свой код таким образом, чтобы была обработана исключительная ситуация, когда вызывающий код скомпилирован явно :

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

Как уже сказал DeepSpace, нет смысла исключать такую ​​ошибку, потому что нет никакого здравого способа исправить такое состояние программы во время выполнения.

0 голосов
/ 11 июля 2019

Перед выполнением программы компилятор проверяет, имеет ли ваш код правильные отступы, а если нет - выдает 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 бесполезна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...