サーチ…


構文

  • パス

備考

なぜあなたは明示的に何もしないように通訳者に言いたいのですか? Pythonには、( ifexceptdefclassなどの後の)コードブロックを空にすることはできないという構文上の要件があります。

しかし、時には空のコードブロックがそれ自体で有用な場合もあります。空のclassブロックは、キャッチ可能な例外など、新しいclassを定義できます。空exceptブロックは、許しを求めることが何もない場合、「後で許してください」と表現する最も簡単な方法です。イテレータがすべて重い作業を行う場合、イテレータを実行するforの空のforループが便利です。

したがって、コードブロック内に何も起こらないと仮定すると、そのようなブロックにはIndentationError生成しないためのpassが必要です。また、(同様に、評価されるだけの用語を含む任意のステートメントEllipsisリテラル...または、ほとんどの場合、文字列、ドキュメンテーション文字列)を使用することができるが、 pass実際に何が起こることになっていないことを明確にし、必要はありません実際に評価され、(少なくとも一時的に)メモリに記憶される。ここには、自分の道を横切った最も頻繁に使われるpass小さな注釈付きコレクションがあります。良いものと悪いものをいくつかコメントしています。

  • 特定のタイプのExceptionxml例)を無視する(すべてまたは)

     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


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow