Возвращаем None или кортеж и распаковываем

Меня всегда раздражает этот факт:

$ cat foo.py
def foo(flag):
    if flag:
        return (1,2)
    else:
        return None

first, second = foo(True)
first, second = foo(False)

$ python foo.py
Traceback (most recent call last):
  File "foo.py", line 8, in <module>
    first, second = foo(False)
TypeError: 'NoneType' object is not iterable

Дело в том, что для правильной распаковки без проблем нужно либо перехватить TypeError, либо иметь что-то вроде

values = foo(False)
if values is not None:
    first, second = values

Что немного раздражает. Есть ли уловка, чтобы улучшить эту ситуацию (например, установить для первого и второго значение None без возврата foo (None, None)) или предложение о лучшей стратегии проектирования для случаев, подобных представленному мной? * переменные возможно?

Ответы на вопрос(9)

Ваш ответ на вопрос