>>> non_iterable = 1
>>> 5 in non_iterable
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: 'int' object is not iterable
>>> class also_non_iterable:
... def __contains__(self,thing):
... return True
>>> 5 in also_non_iterable()
True
>>> isinstance(also_non_iterable(), Iterable)
False
Esiste un motivo per le rivendicazioni di parole chiave in
per volere un oggetto iterabile quando ciò che realmente desidera è un oggetto che implementa __contains__
?Perché la parola chiave 'in' afferma che ha bisogno di un oggetto iterabile?
Ha senso. Immagino che il messaggio di errore sia solo un po 'inesatto, quindi. –
Non necessariamente. Se hai provato contiene prima, non è riuscito e sono tornati alle iterazioni successive, il bit di iterazione è il punto in cui un'eccezione potrebbe esplodere. Quindi la messaggistica è coerente con il punto di errore non recuperabile. –
E sì, che è anche menzionato nella documentazione - * Se viene sollevata un'eccezione durante l'iterazione, è come se fosse stata sollevata quell'eccezione. *. –