2011-09-23 2 views
8

私はApress, Beginning Python from Novice to Professionalの本をフォローしています。それは:Try-Except-Finallyステートメントの古い本の説明

最後に言及されています。 例外が発生しているかどうかにかかわらず、 コード(たとえば、クリーンアップコード)が実行されていることを確認する必要がある場合は、try/finallyを使用できます。このコードは、最後に 節に入れられます。同じtryステートメントにexcept節とfinally節の両方を指定することはできませんが、一方をもう一方のtry節に入れることができます。

私はこのコードを試みた:

def someFunction(): 
    a = None 
    try: 
     a = 1/0 
    except ZeroDivisionError, e: 
     print 'Yesss' 
     print e 
    finally: 
     print 'Cleanup' 
     del a 

if __name__ == '__main__': 
    someFunction() 

を...出力はここ

Yesss 
integer division or modulo by zero 
Cleanup 

で、私は、同じtryセグメントにexceptfinallyをしていない使用しています?コードは正常に動作します。私は本が言うことをかなり得られない!

誰かが明らかにしてください。ありがとう。

+3

受け入れられた答えは言うように、あなたの本は古くなっています。実際、それは5年以上古いです。過去5年間にPythonで変更された*たくさんの*があります。あなた自身に恩恵を与えて、最近の本を買う。 – Duncan

+1

確かに行うでしょう:) – bdhar

+0

あなたのすべての本を投げ捨て、[documentation](http://docs.python.org)から直接作業してください。特に、本/ドキュメントが適用されるPythonのバージョンに注意してください。 whatsnewリスト、特にメジャーな2.xまたは3.xのバージョンをすべてスキップしてください(2.xは2.7で安定していますが、これは歴史的です)。 – smci

答えて

14

、これは、Python 2.5以降に修正されました、と明らかに言い換えるdocumentation

に注目される、あなたの本は、本が間違っているかもしれない日付

1

の外に/間違っている、私は怖いですPython documentationは3つすべてを使用しています。たぶん、新しい本を手に入れる時が来ましたか?

6

私は本が実際にその例を与えていると信じているので、私は彼が正確に何を意味していたのか分かりません。前の回答が指摘したように、これは

try: 
    try: 
     print 'something' 
    except: 
     print 'some weird error' 
finally: 
    print 'finally something 

は、それは除いまたはelseステートメントを最後に結合することは許されなかったのpython 2.4まで

try: 
    print 'something' 
except: 
    print 'some weird error' 
finally: 
    print 'finally' 
0

と同等になるように、Pythonの2.5で変更されました。 しかし、Python 2.5以来、他のオブジェクト指向プログラミング言語のように、それはブロックとfinallyブロック以外の結合をサポートします。 最新のpythonのドキュメントを参照してください

関連する問題