2017-01-31 11 views
0

python3にはtry/exceptという質問があります。try/exceptの値は実行後に利用可能

私はあなたのようなコードを持っているのか疑問に思っ:

#1

try: 
    #do something here 
    var = 'some value here' 

except: 
    #do something if it fails 

#2

try: 
    #do something here 
    newvar = var #var from above 

except: 
    #do something if it fails 

私は#で#1からvarを使用することができます2それを使用しているImのような0、または#1try or exceptブロックに入っても、もはやvarの値はありませんか?

はあなたの変数を割り当てた前に、例外がtryブロックで発生した場合、それが宣言されることはありませんあなた

+1

注:例外的な例外をキャッチする必要があります。「例外IndexError: –

答えて

2

によって異なります。

変数varに格納する値を計算中に#1のコードが失敗した場合、割り当ては行われず、varはそのコードブロックの前の状態になります。 Pythonのドキュメントでは、等号の右辺の値が最初に計算され、その計算が完了したら、結果の値は等号の左側にある変数名にバインドされます。 varが未定義の場合でも未定義です。それが定義されていて値を持っていれば、その値を持っています。その定義やその価値を失うことはありません。

varが未定義の場合は、コードブロック2で例外が発生します。 varに古い値がある場合でも、コードブロック#2にはその値がそのまま使用されます。

あなたが望むかどうかは、他の要因によって決まります。

@Chris_Randsがコメントで指摘しているように、あなたのスタイルはあまり良くありません。あなたは特定の例外を捕らえ、それらを処理する必要があります。予期しない例外を発生させ、より高いレベルで処理する必要があります。例外は、ユーザーがコードを停止する以外の理由で停止したくない長期実行プログラムでコードを使用する場合です。その場合は、予期していた例外を捕まえて処理し、予期しない例外を完全なトレースバックと共にいくつかのファイルに記録して、プログラマが後で問題を解決できるようにする必要があります。決してすべての例外を捕まえずに、何らかのログを取らずに続行してください。

+0

」のように、@Roryに感謝します。 – Jshee

0

ありがとうございます。

変数を安全に使用するには、例外の場合(つまり、exceptブロック内)に変数を設定する必要があります。

関連する問題