Python Language
パスステートメント
サーチ…
構文
- パス
備考
なぜあなたは明示的に何もしないように通訳者に言いたいのですか? Pythonには、( if
、 except
、 def
、 class
などの後の)コードブロックを空にすることはできないという構文上の要件があります。
しかし、時には空のコードブロックがそれ自体で有用な場合もあります。空のclass
ブロックは、キャッチ可能な例外など、新しいclass
を定義できます。空except
ブロックは、許しを求めることが何もない場合、「後で許してください」と表現する最も簡単な方法です。イテレータがすべて重い作業を行う場合、イテレータを実行するfor
の空のfor
ループが便利です。
したがって、コードブロック内に何も起こらないと仮定すると、そのようなブロックにはIndentationError
生成しないためのpass
が必要です。また、(同様に、評価されるだけの用語を含む任意のステートメントEllipsis
リテラル...
または、ほとんどの場合、文字列、ドキュメンテーション文字列)を使用することができるが、 pass
実際に何が起こることになっていないことを明確にし、必要はありません実際に評価され、(少なくとも一時的に)メモリに記憶される。ここには、自分の道を横切った最も頻繁に使われるpass
小さな注釈付きコレクションがあります。良いものと悪いものをいくつかコメントしています。
特定のタイプの
Exception
(xml
例)を無視する(すべてまたは)try: self.version = "Expat %d.%d.%d" % expat.version_info except AttributeError: pass # unknown
注:から、次の例のように、昇給のすべてのタイプを無視
pandas
、それはまた、おそらく、発信者に渡されるべき例外をキャッチしているため、一般的に、悪い習慣と考えられ、例えばKeyboardInterrupt
またはSystemExit
(あるいはHardwareIsOnFireError
-どのようにあなたが知っています特定のエラーが定義されたカスタムボックスでは実行されていないため、呼び出し元のアプリケーションによっては知りたいことがあります)。try: os.unlink(filename_larry) except: pass
代わりに、少なくとも
except Error:
を使用するか、この場合はexcept OSError:
ことがexcept OSError:
。私がインストールしたすべてのPythonモジュールを簡単に分析すると、すべてのexcept ...: pass
文の10%以上がすべての例外をキャッチしているので、Pythonプログラミングではまだ頻繁に使用されています。新しい動作を追加しない例外クラスを派生させる(
scipy
):class CompileError(Exception): pass
同様に、抽象基底クラスとして意図されたクラスは、明示的に空の
__init__
や、サブクラスが派生しなければならない他のメソッドを持つことがよくあります。 (例えば、pebl
)class _BaseSubmittingController(_BaseController): def submit(self, tasks): pass def retrieve(self, deferred_results): pass
mpmath
結果を気にすることなく、コードがいくつかのテスト値に対して適切に動作することをテストする:for x, error in MDNewton(mp, f, (1,-2), verbose=0, norm=lambda x: norm(x, inf)): pass
クラス定義や関数定義では、ブロック内の唯一のものとして実行される義務的なステートメントとして、しばしばdocstringが既に用意されています。そのような場合、ブロックには、 "これは実際に何もしないことを意図している"と言うために、例えば
pebl
docstring に加えてpass
を含むかもしれません:class ParsingError(Exception): """Error encountered while parsing an ill-formed datafile.""" pass
場合によっては、 "このメソッド/クラス/ if-block / ...はまだ実装されていませんが、これを実行する場所になります"というプレースホルダとして
pass
が使用されますが、私は個人的にEllipsis
リテラルを好み...
(注:python-3のみ)と、前の例の意図的な "no-op"とを厳密に区別するためです。たとえば、モデルを広いストロークで記述すると、def update_agent(agent): ...
他の人が
def update_agent(agent): pass
前
def time_step(agents): for agent in agents: update_agent(agent)
後の時点で
update_agent
関数を記入することを忘れないでください。ただし、コードの残りの部分が意図したとおりに動作するかどうかを確認するためにいくつかのテストを実行してください。 この抽象メソッドは、すべてのサブクラスで実装する必要があります。この基本クラスで定義する一般的な方法はありません 。または、 この関数はraise NotImplementedError
。 この名前では、このリリースではまだ実装されていませんが、これは署名がどのように表示されるかです )
例外を無視する
try:
metadata = metadata['properties']
except KeyError:
pass
捕捉可能な新しい例外を作成する
class CompileError(Exception):
pass