【问题标题】:how to log a indentation error in python?如何在python中记录缩进错误?
【发布时间】:2019-05-17 11:03:11
【问题描述】:

您好,我正在尝试在函数 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

【问题讨论】:

    标签: python python-2.7 debugging error-handling try-except


    【解决方案1】:

    Python 在开始执行任何代码之前解析整个代码文件。不幸的是IndentationErrorSyntaxError 的子类,这是一个只能从evalexecimport 语句中捕获的错误。

    为了您的测试,您可以将一些损坏的代码写入一个单独的文件并尝试将该文件作为模块导入。这样你就可以抓住IndentationError,如果这与你有关的话。

    【讨论】:

    • 我有一个正在运行的代码,其中发生了一些缩进更改并且代码没有提供所需的输出。花了一些时间后,我意识到这只是由于缩进。我在代码中应用了记录器,但它没有记录任何错误。
    【解决方案2】:

    将 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
    

    如果您有任何其他疑问,请告诉我。

    【讨论】:

    • 你能在参考中解释一下吗?我对你的级别编号有点困惑。我已经用行号编辑了代码。
    • 当然,我只是添加了一些关于级别和行号的说明。让我知道这是否有帮助。
    【解决方案3】:

    正如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
    

    【讨论】:

    • 什么是 try1 & try2
    猜你喜欢
    • 1970-01-01
    • 2011-03-13
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    • 2014-09-26
    相关资源
    最近更新 更多