Python как избавиться от сообщений об ошибках PyDictionary

1

У меня есть следующий код, чтобы проверить, находится ли слово в словаре. Если слово не существует, вызов словаря.meaning возвращает None. Проблема в том, что он также выплевывает сообщение об ошибке "Ошибка: произошла следующая ошибка: индекс списка вне диапазона". Я сделал некоторые исследования, и оказалось, что я мог бы использовать комбинацию try :, за исключением: но независимо от того, что я пытался, сообщение об ошибке все еще распечатывается. Вот тестовый пример, который показывает проблему. Как я могу заставить этот код работать без отображения ошибки индекса?

Код:

    def is_word(word):
        from PyDictionary import PyDictionary
        dictionary=PyDictionary()
        rtn = (dictionary.meaning(word))
        if rtn == None:
           return(False)
        else:
           return (True)

    my_list = ["no", "act", "amp", "xibber", "xyz"]

    for word in my_list:
        result = is_word(word)
        if result == True:       
           print(word, "is in the dictionary")
        else:
           print(word, "is NOT in the dictionary")

Выход:

no is in the dictionary
act is in the dictionary
amp is in the dictionary
Error: The Following Error occured: list index out of range
xibber is NOT in the dictionary
Error: The Following Error occured: list index out of range
xyz is NOT in the dictionary
  • 0
    Попробуй / поймай ответ. Куда ты это положил? Покажите этот код.
Теги:
python-3.x
dictionary

1 ответ

2

Я предполагаю, что ваш try/except block был вокруг неправильного блока, или вы не поймали его правильно, но это сложно сказать без вашего кода.

Попробуйте поместить try/except в раздел кода, который будет ошибкой (в этом случае проверка словаря).

РЕДАКТИРОВАТЬ:

Виноват. Ошибка печатается в библиотеке PyDictionary. Вы должны уметь замолчать, делая meaning(word, disable_errors=True).

def is_word(word):
    from PyDictionary import PyDictionary

    dictionary = PyDictionary()

    try:
        output = dictionary.meaning(word, disable_errors=True)
    except:
        return False
    else:
        return bool(output)

my_list = ["no", "act", "amp", "xibber", "xyz"]

for word in my_list:
    result = is_word(word)
    if result:       
       print("{} is in the dictionary".format(word))
    else:
       print("{} is NOT in the dictionary".format(word))

Второе редактирование: использование https://github.com/tasdikrahman/vocabulary.

from vocabulary.vocabulary import Vocabulary
vb = Vocabulary()

my_list = ["no", "act", "amp", "xibber", "xyz"]

for word in my_list:
    if vb.meaning(word):
       print("{} is in the dictionary".format(word))
    else:
       print("{} is NOT in the dictionary".format(word))
  • 0
    Спасибо, я не видел опцию disable_errors в документе. Кажется, есть логическая проблема, поскольку выходные данные этого кода говорят, что каждое слово НЕ было найдено в словаре, поэтому кажется, что выполняется только условие else. Этого должно быть достаточно, чтобы заставить меня идти.
  • 0
    Привет Дженнер. Вышеописанный код работал правильно для вас (реальные слова говорят, что они есть в словаре, а фальшивые слова говорят, что это не так)? Я поэкспериментировал с этим и обнаружил, что если я запускаю output = dictionary.meaning (word, disable_errors = True) за пределами try: exception: block, я получаю ошибку «неверный аргумент». Поэтому я думаю, что попытка: кроме: просто маскирует настоящую ошибку. Похоже, что версия PyDictionary, которую я использую, не считает disable_errors = True допустимым аргументом для dictionary.meaning. Можете ли вы указать мне, где вы нашли этот аргумент? Возможно, у меня есть опечатка или что-то?
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню