2016-08-03 4 views
1

私は、配列の2番目の項目を検証したい配列を持っています。 elseブロックにarrayエラーなしで配列要素をチェックしてアクセスする

if len(array) > 1: 
    # Process for array[1] 
  • キャッチIndexErrorとプロセスのために私の心

    1. チェックに来る2通りの方法があります。 1が優れている

      try: 
          array[1] 
      except IndexError: 
          pass 
      else: 
          # Process for array[1] 
      

    あなたは他のオプションを持っている場合、私は:)

  • +0

    このようなPythonの決定についての大きな点は、読みやすさです。最初のオプションは、私にはより読みやすいように見えます。 –

    +1

    これはStack Overflowのための悪い質問ですが、[チャットルーム](http://chat.stackoverflow.com/rooms/6/python)に参加するのに十分な担当者がいます。これは –

    +0

    私は 'stackoverflow'に移動するように私に尋ねる' codereview'と同じ質問をします。 'stackroomflow'は' chatroom'に行くように頼んでいます、 'charroom'ルールは"あなたの最近のメインのサイトは、質問を投稿して回答するための専用スペースです。 " – Nilesh

    答えて

    4

    のPythonを学ぶために準備ができていますがEAFP coding styleを奨励:

    EAFP
    許可よりも許しを求めることが容易。この一般的なPython コーディングスタイルは、有効なキーまたは属性の存在を前提としており、仮定が偽である場合は が例外をキャッチします。このきれいで速い スタイルは、多くのtryexceptステートメントの存在が特徴です。技術は、このようなC.

    など、多くの 他の言語に共通するLBYLスタイルとは対照的でこれはtry/exceptを意味するだけ行う、完全に罰金ですが、else句を使用する必要はありません。

    try: 
        # Process for array[1] 
    except IndexError: 
        pass 
    
    +0

    tryでの処理は、処理中に別のIndexErrorを捕まえる必要がないことを意味します。また、特別に試行しなければならない場合、キャッチが行われていないために異常なバグが発生する可能性があります。右のIndexError。特に「プロセス」が大きくなったとき。彼が多くの許しをそのように求めなければならない場合、彼はそれをより良く書いた道を作りました... – Cabu

    +0

    'try/catch/else'ブロックを使用するためのドローバックはありますか? – Nilesh

    +0

    @Cabuあなたは、IndexErrorの代わりに 'if' condtionを使うのが好きですか?そして 'catchが正しいIndexError'で行われなかったという意味は何ですか? – Nilesh

    1

    あなたの配列は、少なくとも2つの項目を持っている必要がある場合は、私がアサートするだろう:

    assert len(array) > 1, "Array should have at least 2 items" 
    

    ヨーヨーの場合「[1]配列のためのプロセス」

    if len(array) > 1: 
        # Process for array[1] 
    

    私にとってはトライフォームはあなたが例外をキャッチする必要がある場合は特に、長期的に読みにくくなりますウル配列は、私は最初の形式を使用する2アイテムを持つことができます部分...

    関連する問題