2016-01-25 4 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, а затем print ing и позволяете выполнить провал.

Я хотел бы сделать это вместо:

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

Спасибо за разъяснение! Ваш ответ был на месте :) –

Смежные вопросы