Я занимаюсь программированием статического типа, и мне интересно понять логику программирования динамического типа, чтобы проверить, могут ли языки динамического типа лучше соответствовать моим потребностям.
Я читал о теории программирования уток. Я также читал, что модульное тестирование (желательное и используемое в программировании статического типа) становится необходимостью в динамических языках, где проверки во время компиляции отсутствуют.
Однако я все еще боюсь упустить общую картину. В частности, как проверить, нет ли ошибки при случайном изменении типа переменной?
Давайте сделаем очень простой пример на Python:
#! /usr/bin/env python
userid = 3
defaultname = "foo"
username = raw_input("Enter your name: ")
if username == defaultname:
# Bug: here we meant userid...
username = 2
# Here username can be either an int or a string
# depending on the branch taken.
import re
match_string = re.compile("oo")
if (match_string.match(username)):
print "Match!"
Pylint, pychecker и pyflakes не предупреждают об этой проблеме.
Каким же способом Pythonic справляется с подобными ошибками?
Следует ли обернуть код попыткой / уловом?