2017-01-12 6 views
1

ブロックの半分だけでなくブロックを実行するtry以外のブロックの書き方を理解できず、私の例f か試してみるのいずれかの行がPython:tryブロックが失敗したときにのみ例外ブロックを実行しています

2 
2 

代わりの

を返すを返す

x = 1 
y = 1 


try: 
    x = x+1 
    print(x) 
    x.append(1) 
except: 
    print(x) 

を失敗した場合、私は試すの任意の部分を実行したくない強調

1 

予想通りです。試しに失敗したときにブロックを除いてのみ実行されるという印象の下で、私は馬鹿げていたので、これは私には問題でした。私は美しいスープを使用してウェブサイトを掻き集めています。スープの割り当ては通常例外をスローし、もう1つのブロックは実行されますが、予期しないエラーの後にいくつかのリストを追加してから例外ブロックを実行して再度追加します。各ブロック内のどこにあるかによって、長さの異なるリストが残されます。

何か助けていただければ幸いです。

+2

しかし、あなたのtryブロック*が*失敗ありません。 'x.append(1)'はxが整数であるため例外が発生します。 –

+0

@DanielRoseman私は、私の例のように、その部分が失敗した場合にtryブロックを実行したくないのですが、1を返したい2,2,2 –

+0

しかしそれは意味をなさない。失敗したかどうかを知るためには、実行する必要があります。 –

答えて

2

あなたがエラーを除いて、ブロック内のxの値にcomputed_resultをリセットすることができます:

x = 1 
y = 1 
computed_value = 0 

try: 
    computed_value = x + 1 
    #print(fallback_var) 
    computed_value.append(1) 
    print("Exceution succeed: keeping value") 
except: 
    print("Exceution failed: resetting value") 
    computed_value = x 
    #print(x) 


print(computed_value) 
+0

ありがとうモーリス、私はもっとエレガントなことを望んでいたが、私はこの仕事をすることができると思う。 –

+1

よりエレガントなものは、カスタマイズされた[コマンドパターン](http://python-3-patterns-idioms-test.readthedocs.io/en/latest/FunctionObjects.html#command-choosing-theoperation-at-runtime) 。 –

+0

ありがとう、私はそれを良い読書を与えるつもりです。 –

0

これは両方を実行します。このx2になった後

あなたのコード

try: 
    x = x+1 
    print(x) 
    x.append(1) 
except: 
    print(x) 

のpython開始実行、それはライン

x = x + 1 

によってラインを実行します。あなたの出力の最初のよう

その後、

print (x) 

印刷2

x.append(1) 

上記のstatment raise例外は、コード内でexcept節でキャッチされます。

xの値はすでに2x = x + 1に変更されています。あなたは

print (x) 

を行う際exceptではそれは再び2を印刷します。

1

のは、段階的に行ってみよう:

あなたのコードが正しくx=x+1を実行する(今、xは2です)。

これで正しくprint(x)が実行されます(2が出力されます)。

そして、それはx.append(1)を実行しよう(と失敗)

それは除いて入り、print(x)を実行する(それが2印刷します)これは予想だまさに出力

append(1)に失敗したので。

関連する問題