NoneType в MU5 на BBC Microbit

У меня есть код для простого тахометра на Microbit. При возврате переменной rev_per_second иногда это NoneType (по неизвестным причинам). Я пытаюсь поймать это в функции, но, похоже, это не работает. Где я ошибаюсь, пожалуйста.

# part of the function revs()  

     if end_time < running_time():   
         try:
             rev_per_second = rev_per_second
         except TypeError:
             rev_per_second = 1    
         return rev_per_second  # make this value available to the main program

# main part of the program            
while True:
    rev_per_min = revs() # sometimes this is "None" Why??
    display.scroll(str(rev_per_min))

person Bobh46320    schedule 12.11.2016    source источник
comment
Здесь недостаточно контекста, чтобы быть уверенным, но, скорее всего, что-то инициализирует или переустанавливает revs_per_second в None.   -  person Sean Houlihane    schedule 14.11.2016
comment
rev_per_second устанавливается в 1 в верхней части функции перед оператором while, так что же может установить его в None?   -  person Bobh46320    schedule 14.11.2016
comment
Сократите свой код до минимального воспроизводимого примера или дайте ссылку на полный код на github. Мы не можем угадать ответ.   -  person Sean Houlihane    schedule 14.11.2016
comment
извините, мне пришлось отклонить ваше редактирование моего ответа - вы должны либо прокомментировать мой ответ, либо проголосовать за него (при условии, что, как я понимаю, это помогло). Вы также можете либо ответить на вопрос самостоятельно, либо отредактировать вопрос, чтобы сделать его более ясным. Извините, если это кажется немного запутанным, идея состоит в том, чтобы создать доступный для поиска ресурс полезных вопросов и ответов. Кроме того, для справки, вам может понадобиться @ упомянуть других пользователей, если вы хотите, чтобы они увидели ваш комментарий.   -  person Sean Houlihane    schedule 02.12.2016


Ответы (1)


Объяснение почти наверняка состоит в том, что существует путь через функцию, который не заканчивается оператором return, поэтому Python по умолчанию возвращает None.

Убедитесь, что все пути из вашей функции revs() заканчиваются оператором return, иначе Python вернет None, если оператора return нет.

person Sean Houlihane    schedule 16.11.2016
comment
Нашел неуловимый ответ. Это была ошибка отступа при возврате из функции. - person Bobh46320; 06.12.2016
comment
Кажется, я кого-то расстроил :) - person Sean Houlihane; 08.12.2016