1

私の関数は文字列を行に分割し、インデックスの5行目をチェックして、2つの値のいずれかを返します。簡略化したバージョンは次のとおりです。

def f(text, index):
   rows = text.split('\n')
   row = rows[index] # <-- IndexError thrown here.
   if row_meets_some_condition:
      return "Yes"
   else:
      return "No"

呼び出し元は、index(ファイルの終わりに基づく索引付けを使用したい場合)に負の値を渡すことがあります。これは、text行が少なすぎる場合を除いて、正常に機能します。IndexErrorrow = rows[index]

エラーをキャッチする以外に、それがindex合法的なインデックスであることを確認する慣用的な方法はありますか?rows

4

2 に答える 2

6

Pythonでは、をキャッチするのIndexErrorはかなり慣用的です。入力の行数を予測できない場合はrows、リストにアクセスする前に長さを確認するか、をキャッチすることができますIndexError。次に、2番目のオプションを選択します。

于 2012-08-30T15:52:23.663 に答える
3

キャッチIndexErrorは慣用的な方法です。これが見苦しい場合は、別の関数に分割できます。

def validIndex(container, index):
     try:
         container[index]
     except IndexError:
         return False
     else:
         return True

もちろん、別の方法はifステートメントを使用することです。

if index < 0 and index < -len(rows):
     # invalid index

最後の代替手段は、インデックス作成操作を失敗させてIndexError発生させ、呼び出し元にインデックスが有効であることを確認する(またはエラーを処理する)責任を負わせることです。呼び出し元がテキストのチャンクと行インデックスを渡した場合、無効なインデックスを渡した場合に例外を取得することは完全に合理的です。

于 2012-08-30T15:52:17.637 に答える