как пропустить записанное в питоне - PullRequest
0 голосов
/ 25 апреля 2018

Я делаю цикл для подсчета количества вхождений слов в списке слов.поэтому я использую следующий фрагмент кода:

for i in range(len(traindocs_clean)):
    for word in traindocs_clean[i][1][0]:
        if traindocs_clean[i][1] is None:
            continue
        wordDict[word]+=1

, но я знаю, что есть некоторые строки со значением NULL / NoneType / Blank, поэтому при запуске кода я получу сообщение об ошибке

     for word in traindocs_clean[i][1][0]:
TypeError: 'NoneType' object is not subscriptable

Я пытался использовать ключевые слова continue и pass, чтобы игнорировать эти записи и перейти к следующей, но, видимо, это не работает.Я искал прошлые комментарии и посты, но я не мог получить правильный ответ, поэтому, если вы думаете, что уже есть какой-то пост, такой же, как этот, пожалуйста, поделитесь ссылкой, иначе я буду признателен, если вы поможете мне с решением.спасибо

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018
for word in traindocs_clean[i][1][0]:
    if traindocs_clean[i][1] is None:
        continue

К тому моменту, когда условие if проверяет, не пытался ли traindocs_clean[i][1] is None цикл for получить (и повторить) raindocs_clean[i][1][0]. Если raindocs_clean[i][1] равно None, произойдет сбой, прежде чем условие if сможет проверить, что traindocs_clean[i][1] не равно None.

Чтобы это исправить, вы должны переместить условие if над циклом for:

for i in range(len(traindocs_clean)):
    if traindocs_clean[i][1] is None:
        continue
    for word in traindocs_clean[i][1][0]:
        wordDict[word] += 1
0 голосов
/ 25 апреля 2018

Вы можете обрабатывать исключения с помощью блока try-except:

for i in range(len(traindocs_clean)):
    try:
        for word in traindocs_clean[i][1][0]:
            wordDict[word] += 1
    except TypeError:
        pass

Примечание. Лучше не использовать pass и log или обрабатывать ошибку надлежащим образом.

Использованиеtry-except имеет еще одно преимущество: он дает вам возможность обрабатывать несколько исключений и / или выполнять различные команды в разных ситуациях.Например, если ваш код также склонен к IndexError, вы можете сделать:

    try:
        for word in traindocs_clean[i][1][0]:
            wordDict[word] += 1
    except (TypeError, IndexError):
        pass

Или если вы хотите обработать IndexError другим способом:

    try:
        for word in traindocs_clean[i][1][0]:
            wordDict[word] += 1
    except TypeError:
        pass
    except IndexError:
        # do something 
...