2013-04-05 5 views
7

私はしばらく前に書かれたいくつかのPythonコードを読んでい除きしようと、この発見:Pythonは0

try: 
    # do some stuff 
except 0: 
    # exception handling stuff 

を私は0手段以外だけでは何を確信していますか?私は推測している:何も捕まえない、つまり例外を伝播させようとした場合や、デバッグモードをオンとオフにする何らかのスイッチがあり、0を取り除いてすべてを捕まえることができます。

誰かが洞察力を貸してくれますか? google検索で何も得られなかった...

ありがとう!あなたの例では

  try: 
       if logErrors: 
        dbStuffer.setStatusToError(prop_id, obj) 
        db.commit() 
      except 0: 
       traceback.print_exc() 
+2

あなたは 'except:0'と書かれていないと確信していますか? (結腸の配置に注意してください) – NPE

+0

NPE私は肯定的です、私は今diffを見ています。しかし、私は除いて仮定します:0はexcept:passと等価でしょうか? – mlnyc

+0

実行中にエラーが発生していますか? –

答えて

2

私が理解から、これは(例外の種類をキャッチ)デバッグ目的のために非常に有用である

プレースホルダとして0行為:

(リクエストによって)いくつかのサンプルコード例外のタイプを判別します。

>>> try: 
... x = 5/1 + 4*a/3 
... except 0: 
... print 'error' 
... 
Traceback (most recent call last): 
    File "<stdin>", line 2, in <module> 
NameError: name 'a' is not defined 
>>> try: 
... x = 5/0 + 4*a/3 
... except 0: 
... print 'error' 
... 
Traceback (most recent call last): 
    File "<stdin>", line 2, in <module> 
ZeroDivisionError: integer division or modulo by zero 

は、最初のケースでは、例外は、NameErrorと第でZeroDivisionErrorあります。 0は、キャッチされるすべてのタイプの例外のプレースホルダとして機能します。 Python docsから

>>> try: 
... print 'error' 
... except: 
... 
KeyboardInterrupt 
>>> try: 
... x = 5/0 + 4*a/3 
... except: 
... print 'error' 
... 
error 
+1

これは、 'try' -except'文をまったく持たないこととまったく同じです。 'except 0:'は実際には何もしません。 – omz

+0

例外を再生成するためにexceptブロック内の 'raise'が何かを実行しません –

+0

しかし、(潜在的に長い)ブロックのコードを再フォーマットして保存していますので、それでデバッグ参照を推測しています)。 – FatalError

1

:除いて、 『互換性

「結果のオブジェクトがある場合[...] [以外]句は例外と一致』オブジェクトがあれば例外と互換性があります。は、例外オブジェクトのクラスまたは基本クラス、または例外と互換性のある項目を含むタプルです。

実際には、式の型を使用して、except句が例外と一致するかどうかを判断します。 0は整数型であるため、その型の例外は一致します。

整数を例外として生成することはできないため、これは無効なexceptクラスで、何もキャッチしません。

+1

あなたはPythonで整数例外を発生させることはできません。 'TypeError:例外は旧式のクラスでなければならず、2.7.3ではintではなくBaseExceptionから派生していなければなりません。 –

+0

@AhmedAeonAxanあなたが正しいです。私はちょうどそれを試しました。回答が編集されました。 – Ber

+0

私はある時点(遠い過去)に、except節でコードをトリガーしたと思うintを0にすることができたと思います。今度の声明では、** runtime **では例外が発生しますが、** parse-time **では例外が発生するため、コードは更新されていない可能性があります。 [reference1](http://docs.python.org/release/2.3/ref/raise.html)[reference2](http://docs.python.org/release/2.3/ref/try.html) – mgilson

関連する問題