0

インスタンスがh5ファイルに保存されるpythonクラスを実装しました。そのため、__init__()このクラスの関数は、最初にこの h5 ファイルがまだ以前のシミュレーションから存在するかどうかをチェックし、存在する場合は、このファイルを上書きするか (その後、ファイルは新しいインスタンスによって上書きされる) かどうかを尋ねる raw_input を発生させます。エラーが発生します。

__init__()このファイル(およびインスタンス)がすでに存在し、これが-method に記載されている場合、エラーを発生させず、その後スクリプトが停止する方法を探していますが、開始されたインスタンス化とスクリプトはただ続きます...そのような「キャンセルと継続」を実装するクリーンな方法はありますか?

4

1 に答える 1

0

それを行う正しい方法、例外を発生させることです。デフォルトでは、例外は から__init__それを呼び出した人に伝播し、最終的には一番上まで伝播し、スクリプトを停止します。

ただし、その例外を処理して続行したい場合は、例外の処理で説明されているように、続行したいレベルでtry/ブロックを使用してください。catch

例えば:

class ThingyAlreadyExistsError(RuntimeError):
    pass

class Thingy(object):
    def __init__(self, pathname):
        if os.path.exists(pathname):
            yn = raw_input('{} already exists. Overwrite (y/N)?'.format(pathname))
            if yn.lower != 'y':
                raise ThingyAlreadyExistsError(pathname)
        # finish initialization

thingies = []
for pathname in pathnames:
    try:
        thingy = Thingy(pathname)
    except ThingyAlreadyExistsError:
        continue
    thingies.append(thingy)

に到達する前にこれをキャッチしたい場合は、メソッド、ファクトリ関数、またはループで__init__いつでもチェックを実行できます。この場合、例外は必要ありません。初期化しないでください。しかし、内部で例外を発生させることを妨げるものは何もありません。__new__@classmethodfor__init__

于 2013-01-28T10:06:03.843 に答える