Меня всегда раздражает этот факт:
$ 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)) или предложение о лучшей стратегии проектирования для таких случаев, как тот, который я представляю? * переменные могут быть?