забыв проверить тип
Это не имеет особого смысла. Вам так редко нужно «проверять» тип. Вы просто запускаете модульные тесты, и если вы предоставили объект неправильного типа, все закончится неудачей. По моему опыту, вам никогда не нужно много «проверять».
пытается вызвать атрибут и
получить NoneType (или любой другой)
не имеет атрибута x error.
Неожиданно None
- старая ошибка. В 80% случаев я опускал return
. Модульные тесты всегда показывают это.
Из тех, которые остаются, в 80% случаев это просто старые ошибки из-за «раннего выхода», который возвращает None
, потому что кто-то написал неполное return
утверждение. Эти if foo: return
структуры легко обнаружить с помощью модульных тестов. В некоторых случаях они должны были быть if foo: return somethingMeaningful
, а в других случаях они должны были быть if foo: raise Exception("Foo")
.
Остальные глупые ошибки, неправильно читающие API. Как правило, функции-мутаторы ничего не возвращают. Иногда я забываю. Модульные тесты быстро их обнаруживают, поскольку в принципе ничего не работает.
Это довольно убедительно покрывает "неожиданные None
" дела. Легко для модульного тестирования. Большинство ошибок включают в себя довольно простые для написания тесты для некоторых довольно очевидных видов ошибок: неправильный возврат; невозможность вызвать исключение.
Другие ошибки "не имеют атрибута X" - это действительно дикие ошибки, когда использовался совершенно неправильный тип. Это либо действительно неправильные операторы присваивания, либо действительно неправильные вызовы функций (или методов). Они всегда тщательно продумываются во время модульного тестирования, требуя очень небольших усилий для исправления.
Многие из них довольно безопасны, но если их неправильно обработать, они могут повредить все ваше приложение / процесс / и т. Д.
Хм ... Безвреден? Если это ошибка, я молюсь, чтобы она как можно быстрее закрывала все мое приложение, чтобы я мог ее найти. Ошибка, которая не приводит к сбою моего приложения, является самой ужасной ситуацией, которую только можно представить. «Безвредный» - это не то слово, которое я бы использовал для ошибки, которая не может привести к сбою моего приложения.