0

私はPythonに比較的慣れていないので、クラスについて1つか2つ学ぼうとしています。私は関数の経験があり、クラスがどのように機能するかを理解しようとしています。私の質問は、エラー処理についてです。

通常、関数を使用していくつかの操作を実行できます。問題が発生した場合は、単に False を返し、関数が呼び出された場所を検証してから、残りのコード実行に進むことができます。

クラスでこれを行うにはどうすればよいですか?

私は単純なメソッドを持つ単純なクラスを持っています。

my_object = MyObj()
my_object.swim()

my_object を "swim" にするとき、エラーや問題を簡単な方法で処理できるようにしたいと考えています。例えば:

def swim(..) の実行中: False を返すか、さまざまなエラーを発生させ、アプリケーションを完全に中断することなくそれらを処理できるようにしたいと考えています。

つまり、私はしたい:

try:
    my_object.swim()
except:
    # it can not swim. I want it to tell me why or just tell me "False" so I can execute another codeblock and tell it to perhaps .walk_away()

try/except ブロック、エラーの発生、それらがどのようにクラスであるかについて読みました。しかし、メソッドを実行し、そのメソッドの実行結果を処理しようとする (true、false、または別のエラーでしょうか?) という、私が好きなことはしません。

Pythonでこれを行うにはどうすればよいですか?

ありがとうございました。

4

2 に答える 2

5

次のようにします。

class MayNotSwimException(Exception):
    def __init__(reason):
        self.reason = reason

class Person(object):
    def __init__(self, can_swim):
        self.can_swin = can_swim

    def swim(self):
        if self.can_swim:
            self.do_something()
        else:
            raise MayNotSwimException("I can't swim because...!")

    def walk_away(self):
        self.do_something_else()



p = Person(can_swim = False)
try:
    p.swim():
except MayNotSwimException as e: # In python 2.5-, use MayNotSwimException, e 
    print "That person can't swim because", e.reason
    p.walk_away()

例外は次の目的で使用できます。

  • 制御の流れを変更する (try/exceptブロックに戻る)
  • 例外自体を介して情報を転送します。これは、さまざまなタイプの例外を発生させることによって (つまり、 aMayNotSwimBecauseDoesntWantExceptionと aを定義して、MayNotSwimBecauseFeelsSleepyExceptionそれらを個別にキャッチすることができます)、または Exception オブジェクト自体の属性 ( e.reason) によって実現できます。

より詳細な説明については、ドキュメントをご覧ください。

于 2012-10-27T22:03:48.017 に答える
2

swim メソッド自体に、try..except またはその他の形式の失敗チェック (および反応コード) を入れます。例外は致命的である必要はありませんが、コードをクリーンに保つために、通常の条件を使用できる場所での使用を制限することをお勧めします。

于 2012-10-27T22:00:50.593 に答える