Соглашусь с Ильёй Ермаковым: единственный существенный недостаток Python - динамическая типизация. Отсюда вытекают:
Необходимость тратить больше времени на тестирование, а не собственно программирование. При разработке на статически типизированных языках можно опереться хотя бы на type checker, а тут нужны тотальные проверки всего и вся.Зачастую не самый лучший (если вообще имеющийся) дизайн ПО. При разработке на статически типизированных языках с самого начала приходиться детально прорабатывать типы данных, которые предполагается в дальнейшем использовать, а тут можно по началу без дизайна выкатить на "грязных хаках", вроде duck typing, а раплачиваться будут потом и, скорее всего, другие.Плохая читаемость и высокая сложность изменения кода. Информация о типах переменных и при чтении, и при изменении кода очевидно крайне важна. Её, конечно, можно сохранять в комментариях, но где гарантии, что при каждом изменении кода, коментарии так же будут изменены?Статический анализ крайне затруднён.
То есть, резюмирую, как Илья и сказал: "развитая система статической типизации является основой современной разработки серьёзного ПО". Вдумчивое проектирование, статический анализ, легко читаемый и модифицируемый код - всего это крайне тяжело достичь, используя динамически типизированные языки. Но для скриптов в несколько десятков строчек (для себя, здесь и сейчас) оно, к сожалению, годится.

Ах, ну и чуть не забыл упомянуть, что подвижка в сторону статической типизации в Python есть. В версии 3.5 появились т.н. type hints (PEPs483,484), которые суть есть подсказки людям и машине по типам используемых объектов. Цели как раз улучшение читаемости и возможностей статического анализа.