Image

Image_winnie wrote in Imageru_python

string instead list of strings

Как вы боретесь с тем, что в функцию случайно передали имя файла вместо списка имен файлов?

Мне приходится постоянно втыкать проверки на строки:


def get_files(exlude_dirs):
  assert not (isintance(exclude_dirs, str) or isintance(exclude_dirs, unicode)) #жесткий вариант

  if isintance(exclude_dirs, str) or isintance(exclude_dirs, unicode):
    exclude_dirs = [exclude_dirs] #мягкий вариант

  assert not hasattr(exclude_dirs, 'isalnum') #жесткая проверка, что оно не умеет крякать иначе нафиг


Периодически слышу забавные истории "питон удалил все файлы до которых дотянулся", когда строка c:/dir/ случайно воспринялась как список ['c', ':', '/', 'd', ...]

updated:
в комментариях заметили, что проверку можно упростить до if isinstance(..., basestring),
а параметры функции иногда можно естественно переписать как get_files(*excluded_dirs), что снижает вероятность передачи строки вместо списка.