Как известно, в питоне можно итерироваться по строке как по списку символов. Отдельного типа для символа нет, символ - это строка длиной в 1. Часто удобно, но иногда приводит к ошибкам, выносящим мозг.
Предположим, есть функция, в которую передаётся список путей. Или любой список строк. Если случайно в такую функцию передать не список, а строку... Скорее всего такой параметр будет расценен как список однобуквенных строк.
import os
def Func(paths):
print '-'*20
for path in paths:
print path, 'exists:', os.path.exists(path)
Func(["C:/autoexec.bat", "c:/windows"])
Func("C:/autoexec.bat")( вывод )Такая опечатка у нас продержалась 4 месяца с формулировкой "выяснить, почему в Release-режиме игра иногда подвисает на 10 секунд". Режим Release был связан с подвисаниями из-за особенностей игровой виртуальной файловой системы.
Когда
bandures и
orvind рассказывали про этот баг, их лица были озарены эмоциональной улыбкой. Что показывает, что для счастья человеку надо совсем немного, достаточно немного странностей в системе типов.
PS. ещё
внезапно обнаруженный баг. "На небе - тень от мира".