2017-08-02 7 views
0
for i in range(1,1000): 
    try: 
     x = some_crazy_function(my_parm(i)) 
     if x in massive: 
      raise Exception() 
     massive.append(x) 
     x = dict(qnother_crazy_functionsl(x.replace('X','Y'))) 
     x = new_func(x['constant'])[0] 
     next.append(x) 
    except: 
     break 

は、私は、Pythonにかなり新しいだと私は他の誰かのコードループを終了する恐ろしい方法のように見える私に例外を発生させる正しい方法ですか? (パイソン)

を維持しながら、このフラグメントを渡りました。 Pythonでコーディングするのは受け入れられた方法ですか?私はそれに慣れるでしょうか、見た目ほど悪いですか?例最も単純で

+0

コードに異常が発生したときに例外が発生します。もちろん、 'x'が大量に存在すると予想されない限り、' '大量に' 'x''に異常はありません。パフォーマンス面では、例外は非常に高価です。したがって、代わりに 'break'を使用してください。 – DyZ

+0

裸の 'except:'を使用することは、 'KeyboardInterrupt'やその他のキャッチしたくないものもキャッチするので、悪い考えです。 – kindall

答えて

1

breakはループから抜け出すための最良の(最も単純な)方法でしょう:

if x in massive: 
    break 

ただし、例外をスローし、キャッチ場合は、ご利用の場合のために、より傾向があります

class MassiveException(Exception): 
    pass 

次に、あなたはこのようにそれを投げることができます:

、私が最初に 定義独自のユーザー定義の例外クラスをお勧めします
if x in massive: 
    raise MassiveException() 

、その結果、このようにそれをキャッチ:

except MassiveException: 
    ... # do something here 

これは、それはあなたの意図が明確になるため優れている、ともキャッチ他のすべての例外を飲み込むなる除きます本当にドン」を取り除きます飲み込まれたくない。

+0

ありがとうございます。私が言ったように、それは悪いコードのように見え、あなたの反応は私の感情を補強するように見えるでしょう。このフラグメントを実装するためのコードスニペットをお寄せいただきありがとうございます。 – Don

+0

@Donこれが役に立った場合は、それを受け入れることを検討してください。ありがとう! –

+0

re:accepted申し訳ありませんが、私がコンセプトを理解している間、私はインプリメンテーションに関しては無知です。ここでラインフィードを取得するにはどうすればよいですか? – Don

関連する問題