Возможный дубликат:
Python 2.x gotcha & rsquo; s и наземные мины
Сегодня я снова был укушен изменчивыми аргументами по умолчанию через много лет. Обычно я не использую изменчивые аргументы по умолчанию, если это необходимо, но со временем я забыл об этом. Сегодня в приложении я добавил tocElements = [] в список аргументов функции генерации PDF, и теперь "Оглавление" становится все длиннее и длиннее после каждого вызова "generate pdf".:)
Что еще я должен добавить в список вещей, которые ДОЛЖНЫ избежать?
-
Всегда импортируйте модули таким же образом, например.
from y import x
иimport x
рассматриваются как разные модули. -
Не используйте диапазон вместо списков, потому что
range()
станет итератором в любом случае, следующее:myIndexList = [0, 1, 3] isListSorted = myIndexList == range(3) # will fail in 3.0 isListSorted = myIndexList == list(range(3)) # will not
То же самое можно ошибочно сделать с помощью xrange:
myIndexList == xrange(3)
-
Будьте внимательны при поиске нескольких типов исключений:
try: raise KeyError("hmm bug") except KeyError, TypeError: print TypeError
Это печатает "hmm bug", хотя это не ошибка; похоже, мы ловим исключения обоих типов, но вместо этого мы ловим KeyError только как переменную TypeError, используйте это вместо:
try: raise KeyError("hmm bug") except (KeyError, TypeError): print TypeError