2012-01-18 6 views
8

まず最初に、私は悪いインデントされたコードに問題はありません。この例外はどのように動作するのか考えています。IndentationErrorをキャッチするには

try/exceptブロックを使用してIndentationErrorをコード内でキャッチする方法があれば質問しますか?たとえば、他の人が作成した関数のテストを書いているとします。私はtry/exceptブロックで実行し、彼/彼女が作ることができるすべての警告を処理したい。私はそれが最良の例ではなく、最初のものが私の心に来ることを知っています。例に焦点を当てるのではなく、むしろ問題に焦点を当ててください。

try: 
    f() 
except IndentationError: 
    print "Error" 

print "Finished" 

機能:

はのは、コードを見てみましょう

def f(): 
    print "External function" 

そして結果は次のとおりです。

External function 
Finished 

そして、それは何か、私は理解して準備ができています、外部機能のインデントが一貫しているためです。

しかし、ときに、関数はそのようになります。

def f(): 
    print "External function" 
    print "with bad indentation" 

を例外が未処理である:

print "with bad indentation" 
    ^
IndentationError: unexpected indent 

は、それを達成する方法はありますか?コンパイルの問題だと思うし、これまでのところ私は捕まえる可能性はないと思う。 except IndentationErrorは意味がありますか?

+0

'IndentationError'は' SyntaxError'のサブクラスです。 –

答えて

11

はい、これは可能です。ただし、テスト対象の関数は別のモジュールに存在する必要があります。

# test1.py 
try: 
    import test2 
except IndentationError as ex: 
    print ex 

# test2.py 
def f(): 
    pass 
     pass # error 

これを実行すると、例外が正しくキャッチされます。一度にモジュール全体でチェックが行われることは何も価値がありません。より細かくする方法があるかどうかはわかりません。

5

あなたのモジュールを分析し、悪いインデント、だけでなく、他の多くのエラーを報告しますこれは、そのようなpylintなどのツールを使用することができます。モジュールがコンパイルされたときに

6

IndentationErrorが発生します。 モジュールをインポートするときにキャッチします。モジュールは最初のインポート時にコンパイルされるためです。あなたはIndentationErrorで、Pythonはモジュールをコンパイル終えることができなくなりますので、try/exceptが含まれている同じモジュール、およびモジュール内のコードなしでキャッチそれが実行されますことはできません。

関連する問題