Tôi luôn khó chịu bởi thực tế này:Trở Không có hoặc một tuple và giải nén
$ 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
Thực tế là để giải nén một cách chính xác mà không rắc rối Tôi có một trong hai để bắt TypeError hoặc có cái gì đó như
values = foo(False)
if values is not None:
first, second = values
Đó là loại gây phiền nhiễu. Có cách nào để cải thiện tình huống này (ví dụ: để đặt cả từ đầu tiên và thứ hai thành Không có mà không có foo quay lại (Không, Không)) hoặc đề xuất về chiến lược thiết kế tốt nhất cho các trường hợp như tôi hiện diện? * biến có thể?
ooooh ... điều này tôi đã không xem xét. cách tiếp cận rất "perlish", nhưng thông minh. –
Tôi không đồng ý về việc đó là perl-ish. 'x hoặc y' là một cách rất kỳ quặc khi nói' (x? x: y) 'hoặc' (nếu x sau đó x khác y) 'hoặc' (nếu không x rồi y) 'hoặc cách khác bạn muốn giải thích nó . –
ok, chỉ cần làm việc trong một "hát theo" các cụm từ perl điển hình "bất cứ điều gì hoặc chết()". –