嗨,我正在尝试在函数test()中记录缩进错误,但是当我运行代码时,它正在执行而没有任何错误。任何人都可以在这里告诉我原因。
data BinChar : Char -> Type where
O : BinChar '0'
1 : BinChar '1'
data Every : (a -> Type) -> List a -> Type where
Nil : {P : a -> Type} -> Every P []
(::) : {P : a -> Type} -> P x
-> Every P xs
-> Every P (x :: xs)
fromBinChars : Every BinChar xs -> Nat -> Nat
fromBinChars [] k = k
fromBinChars (O :: z) k = fromBinChars xs (k - 1)
fromBinChars (I :: z) k = pow 2 k + fromBinChars xs (k - 1)
答案 0 :(得分:1)
Python会先解析整个代码文件,然后再开始执行任何代码。不幸的是IndentationError
是SyntaxError
的子类,这是一个错误,只能从eval
,exec
或import
语句中捕获。
出于测试目的,您可以将一些损坏的代码编写到一个单独的文件中,然后尝试将该文件作为模块导入。这样,您就可以捕获IndentationError
(如果与您相关)。
答案 1 :(得分:0)
考虑将Python理解为各个级别的代码,其中缩进定义每个代码属于哪个级别。
因此,可以像从通常从2级转到3级那样,从2级(尝试声明-第2行)转到4级(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
让我知道您是否还有其他疑问。
答案 2 :(得分:0)
正如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