2016-01-25 62 views
1

我目前正在學習Python,並且我有這個練習,您必須處理異常。這個的目標是當給定鍵的值不在列表「self.data」的範圍內時拋出異常。使用列表處理IndexError異常

這是我應該在我的功能進入到測試:

v = Vecteur(-9, -6, 2, 3, -2) 
v[-1] 

現在我應該得到一個IndexError

class Vecteur: 
    def __init__(self, *valeurs): 
     self.data = list(valeurs) 

    def __getitem__(self,key):  

     try: 
      erreur = self.data[key] 
     except IndexError: 
      print('indice invalide pour ce vecteur') 

     return self.data[key] 

    def __setitem__(self,key,item): 
     self.data[key] = item 

一個你能開導我在這個問題上?

在此先感謝!

+0

爲什麼你解壓'* valeurs'然後再次用'名單(valeurs)'包...只是直接把它傳遞給'self.data' –

+0

而這裏究竟是什麼問題? –

+0

感謝您的回覆如此之快,我將編輯我的帖子以澄清此問題:) –

回答

3

你的問題源於你正在捕獲IndexError,然後讓執行失敗。

我應該這樣做,而不是:

class Vecteur: 
    def __init__(self, *valeurs): 
     self.data = list(valeurs) 

    def __getitem__(self,key):  

     try: 
      return self.data[key] 
     except IndexError: 
      raise IndexError('indice invalide pour ce vecteur') 

    def __setitem__(self,key,item): 
     self.data[key] = item 

順便說一句,-1是有效的索引。因此,你可能想改變你的__getitem__

def __getitem__(self, key): 
    if key < 0: 
     raise ValueError("Index has to be greater than 0") 
    # the rest of your __getitem__ here 
+0

感謝您澄清!你的回答是關於點:) –