3 回答

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超11個(gè)贊
檢查 __iter__
在序列類型上工作,但在例如字符串上會(huì)失敗 在Python 2中..我也想知道正確的答案,在此之前,有一種可能性(也適用于字符串): try: some_object_iterator = iter(some_object)except TypeError as te: print some_object, 'is not iterable'
這個(gè) iter
內(nèi)建檢查 __iter__
方法,或者在字符串的情況下, __getitem__
方法。 另一種一般的pythonic方法是假設(shè)一個(gè)可迭代的,如果它不能在給定的對象上工作,那么它就會(huì)優(yōu)雅地失敗。Python詞匯表: Pythonic編程風(fēng)格,它通過檢查對象的方法或?qū)傩院灻麃泶_定對象的類型,而不是通過與某個(gè)類型對象的顯式關(guān)系(“如果它看起來像 鴨子嘎嘎作響就像 鴨子,一定是 鴨子)通過強(qiáng)調(diào)接口而不是特定類型,精心設(shè)計(jì)的代碼通過允許多態(tài)替換來提高其靈活性。鴨子類型避免使用type()或isinstent()進(jìn)行測試。 相反,它通常采用EAFP(請求寬恕比許可容易)的編程風(fēng)格。...
try: _ = (e for e in my_object)except TypeError: print my_object, 'is not iterable'
這個(gè) collections
模塊提供了一些抽象基類,允許詢問類或?qū)嵗欠裉峁┨囟üδ埽纾?/trans> from collections.abc import Iterableif isinstance(e, Iterable): # e is iterable
但是,這不檢查可迭代的類。 __getitem__
.

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超5個(gè)贊
鴨型
try: iterator = iter(theElement)except TypeError: # not iterableelse: # iterable# for obj in iterator:# pass
類型檢查
from collections.abc import Iterable # import directly from collections for Python < 3.3if isinstance(theElement, Iterable): # iterableelse: # not iterable
iter()
檢查 isinstance(obj, Iterable)
檢測注冊為Iterable或具有 __iter__()
方法,但它不會(huì)檢測到使用 __getitem__()
方法。確定對象是否可迭代的唯一可靠方法是調(diào)用 iter(obj)
.
添加回答
舉報(bào)