Как записать ошибку отступа в Python? - PullRequest
0 голосов
/ 17 декабря 2018

Привет, я пытаюсь зарегистрировать ошибку отступа в функции test (). Но когда я запускаю код, он выполняется без ошибок.Может кто-нибудь, пожалуйста, сообщите мне причину здесь.

def test():
        try:                        //1
                        print "ABC" //2//indentaton error//
                logger.info("printed")//3
        #except Exception as e://
                #logger.error("Exception occured while order dictionary",exc_info=True)
        except IndentationError as e://4
                logger.error("indentation err",exc_info=True)//5

Ответы [ 3 ]

0 голосов
/ 17 декабря 2018

Python анализирует весь файл кода до того, как начнет выполнять любой код.К сожалению, IndentationError является подклассом SyntaxError, что является ошибкой, которая может быть обнаружена только из операторов eval, exec или import.

Для целей вашего теста вы можете записать какой-то неработающий код в отдельный файл и попытаться импортировать этот файл как модуль.Таким образом, вы можете поймать IndentationError, если это имеет отношение к вам.

0 голосов
/ 17 декабря 2018

Как сказал alex , мы можем следовать одному и тому же методу рабочего метода.Однако, чтобы поймать синтаксическую ошибку, импортируйте try2.py как модуль в другой файл.

try1.py и try2.py - это файлы python соответственно.

# try2.py
try:
   import try1
except IndentationError as in_ex:
   print in_ex

#try1.py
def test():
    try:                        
             print "ABC" //2//indentaton error
             logger.info("printed")//3
    #except Exception as e://
            #logger.error("Exception occured while order 
              dictionary",exc_info=True)
    except IndentationError as e://4
            logger.error("indentation err",exc_info=True)//5
0 голосов
/ 17 декабря 2018

Считайте, что Python понимает код на уровнях, где отступы определяют, к какому уровню относится каждый код.

В результате можно перейти с уровня 2 (оператор try - строка 2) кУровень 4 (строка 3) точно так же, как вы можете перейти с уровня 2 на уровень 3 в обычном режиме.

Однако, если вы попытаетесь перейти с уровня 2 на уровень 1 без компиляции оператора try согласно его определенному синтаксису,вы получите сообщение об ошибке.

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

ПростоЧтобы дать немного пояснения, вот ваш код с напечатанными номерами уровней и строк:

1    def test():                                           //Level 1
2            try:                                          //Level 2
3                            print "ABC" //indentaton error//Level 4
4                    logger.info("printed")                //Level 3
5            #except Exception as e:
6                    #logger.error("Exception occured while order dictionary",exc_info=True)
7            except IndentationError as e:                 //Level 2
8                    logger.error("indentation err",exc_info=True)//Level 3

Дайте мне знать, если у вас есть какие-либо другие вопросы.

...