1

我的函数将字符串拆分为行,检查第 index 行,并返回两个值之一。这是一个简化版本:

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行太少,在这种情况下我会得到IndexError一个row = rows[index]

除了捕获错误之外,是否有一种惯用的方法来检查是否index是合法索引?rows

4

2 回答 2

6

在 Python 中捕捉 anIndexError是非常惯用的。如果您无法预见您的输入有多少行,您可以rows在访问列表之前检查长度,或者只捕获IndexError. 那我会选择第二个选项。

于 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

最后一种选择是让索引操作失败并 raise IndexError,将确保索引有效(或处理错误)的责任交给调用者。如果调用者传递给你一段文本和一个行索引,那么如果他们传递了一个无效的索引就得到一个异常是完全合理的。

于 2012-08-30T15:52:17.637 回答