How do I distinguish a string from a sequence?
Paul Moore
paul.moore at atosorigin.com
Fri Sep 28 09:43:28 EDT 2001
Yes, I know, a string is a sequence...
I'm thinking of writing a function which can take either a string, or a sequence
of strings, as an argument. A simplified example would be treating a single
string as a 1-tuple - something like
def foo(args):
if # args is a string:
args = (args,)
for arg in args:
print arg
But I'm not sure how best to distinguish a string from a sequence - after all, a
string *is* a sequence. I want to avoid explicit type tests, as that seems prone
to errors (for a start, I should trap both strings and Unicode strings, and what
about 2.2 subclasses of strings?)
But I can't think of a suitable test.
The best I can come up with is a type-test along the lines of
if isinstance(args, type('')) or isinstance(args, type(u'')):
but as I say, that's annoyingly "explicit".
[If it matters, my "real" example is a popen-type function, which can take one
string argument - a command to execute - or a sequence of strings - a pipe
specification, where each element of the sequence would be a stage in the
pipeline]
Has anyone got any alternative suggestions?
Paul.
More information about the Python-list
mailing list