簡體   English   中英

Pythonic習語,用於檢查(負)數組索引的有效性

[英]Pythonic idiom for checking the validity of a (negative) array index

我的函數將字符串分割成幾行,檢查第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行太少,在這種情況下,我在row = rows[index]會出現IndexError row = rows[index]行。

除了捕獲錯誤之外,是否有慣用的方法來檢查index是否是rows的合法索引?

在Python中捕獲IndexError非常習慣。 如果您無法預知輸入有多少行,則可以在訪問列表之前檢查rows的長度,也可以僅捕獲IndexError 那我去第二個選擇。

捕獲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 ,將確保索引有效(或處理錯誤)的責任放在調用者上。 如果調用方正在向您傳遞大量文本和行索引,則在傳遞無效索引的情況下獲得異常是完全合理的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM