2016-12-15 47 views
-3

如果我想找到我的Python給定項目的數組索引,我會做這樣的事情:爲什麼array.index(「foo」)拋出一個異常,而不是返回-1,如果沒有找到元素?

a = ["boo", "foo", "bar", "foz"] 
i = a.index("foo") 

i1

如果我在尋找一個不存在的項目a ValueError異常被引發。

問題:爲什麼最好拋出一個異常,而不是返回-1(如JavaScript的同等功能indexOf呢)?我發現檢查-1更容易,而不是在try-catch中包裝代碼塊。

+4

因爲pyton指數可以逆轉,'-1'意味着最後一個 – Netwave

+0

「爲什麼一個功能使用兩種不同的機制來返回結果和報告錯誤?」 - 因爲那是理智的。 – deceze

+0

實現相同的功能是微不足道的。 'def indexOf(needle,haystack):try:return hackstack.index(needle)except:return -1'我不會這麼做,因爲前面提到的Python中負向索引的原因。 – erip

回答

3

除此之外,丹尼爾已經提到in his answer指數逆轉的說法,你要記住,異常是在一個更核心概念Python與JavaScript相比。

返回一些特殊值的想法,在這種情況下,-1找不到值時,這個概念來自於異常在語言中不是一個非常好的概念。最值得注意的是,它來自C,其中特殊的返回值可以表示各種事物。

的JavaScript借用太多的這一點,因爲它也有異常處理沒有安全的方式。因爲它是一個弱類型語言,它只能抓所有異常類型,所以才抓一些IndexNotFoundException不會真的在那裏工作。

在Python然而,例外的是語言的核心概念,它們被用於全國各地的很多特殊的東西的地方。因此,在物品不在列表中的情況下,在這裏使用它們是有意義的。

1

指標的蟒蛇可以逆轉,-1意味着最後一個:

a = ["boo", "foo", "bar", "foz"] 
a[-1] == "foz" 
True 
相關問題