Humphrey Bogart
Humphrey Bogart

Reputation: 7621

How to determine whether an object is a sequence

I can think of two ways to determine whether an object is a sequence:

As it is most Pythonic to ask forgiveness than to ask permission, I'd use the second idiom, although I consider it more ugly (additionally, raising an exception once you've caught the TypeError to determine that the object isn't a sequence would yield an undesirable "double-exception" stack trace).

Ultimately, is checking that an object defines an __iter__ method exhaustive enough to determine whether an object is a sequence? (In older versions of Python, for example, str didn't define an __iter__ method; I've also heard that some objects can also simply define and use __getitem__ without defining an __iter__ and act like a sequence.) Or is defining __iter__ the contract of a sequence?

Upvotes: 4

Views: 1425

Answers (1)

user395760
user395760

Reputation:

Use isinstance(obj, collections.Sequence). Abstract base classes are exactly for this. They didn't exist prior to 2.6 though. In case you're forced to use older versions, you're out of luck and better stick with EAFP.

Upvotes: 5

Related Questions