2016-01-25 36 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

感谢您澄清!你的回答是关于点:) –