Как я могу подавить сообщения об ошибках в Python? - PullRequest
0 голосов
/ 17 марта 2019

Поэтому я пытаюсь создать программу для удаления всех повторяющихся букв из заданной строки.Код в основном самодельный итератор, который я получил из другого поста: Как сбросить итератор списка в Python?

string = "NNEEXXxxTTGGEENNCCOODDEERR"

class rmvDuplicates:

def __init__(self, list, newString):
    self.newString = newString
    self.list = list
    self.idx = 0
    self.content = list[self.idx]

def __iter__(self):
    return self

def get_content(self, content):
    return content

def get_index(self):
    return self.idx

def get_content_next(self, content):
    try:
        self.idx += 1
        return self.content
    finally:
        self.idx -= 1

def remove(self, elem):
    del self.list[self.idx]
    return

def rewind(self):
    self.idx = 0

def __next__(self):
    try:
        return self.list[self.idx]
    except IndexError:
        pass
    finally:
        self.idx += 1
        self.content = self.list[self.idx]  

new_String = []

li = rmvDuplicates(list(string), new_String)

for elem in li:
    if li.get_content(elem) == li.get_content_next(elem):
        print(li.get_content(elem))
        li.remove(elem)
        print(li.list)

print("Hello")

Примечание: print("Hello")только для целей тестирования

Я немного изменил его, чтобы соответствовать моим потребностям, и он прекрасно работает, пока не достигнет точки IndexError.

def __next__(self):
    try:
        return self.list[self.idx]
    except IndexError:
        pass
    finally:
        self.idx += 1
        self.content = self.list[self.idx]

IЯ уже пытался это выяснить, используя Except-Block с методом pass.

Но, тем не менее, программа отображает это сообщение:

Traceback (most recent call last):
  File "rmv_dplc_cls.py", line 49, in <module>
    for elem in li:
  File "rmv_dplc_cls.py", line 42, in __next__
    self.content = self.list[self.idx]
IndexError: list index out of range

Кто-нибудь здесь знает, как это исправить?, поэтому программа продолжает работать и не прерывается.

Спасибо

Ответы [ 2 ]

1 голос
/ 17 марта 2019

Спасибо @jfaccioni.Ваше предложение было очень полезным.Это не совсем для меня, поэтому я немного его изменил, например:

def __next__(self):
    try:
        value = self.list[self.idx]
        self.idx += 1
        self.content = self.list[self.idx]
    except IndexError:
        value = self.list[self.idx]
    finally:
        if self.idx == len(self.list):
            raise StopIteration
        return value

Мне нужно было self.content, чтобы моя функция работала.

Спасибо за вашу помощь.

0 голосов
/ 17 марта 2019

Попробуйте изменить __next__ метод на:

def __next__(self): 
    try: 
        value = self.list[self.idx]
        self.idx += 1
    except IndexError:
        self.idx = 0
        value = self.list[self.idx]
    finally:
        return value

Пояснение:

Если ваше предложение try терпит неудачу, это означает, что self.list[self.idx] обращается к элементу, который находится за пределами диапазона вашего списка, то есть поднимая IndexError. В этом случае попытка доступа к тому же self.list[self.idx] приведет к другому IndexError на этот раз вне условия try.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...