Skip to Content
Python Cookbook
book

Python Cookbook

by Alex Martelli, David Ascher
July 2002
Intermediate to advanced
608 pages
15h 46m
English
O'Reilly Media, Inc.
Content preview from Python Cookbook

Testing if an Object Is String-Like

Credit: Luther Blissett

Problem

You need to test if an object, typically an argument to a function or method you’re writing, is a string (or more precisely, whether the object is string-like).

Solution

The first thing that comes to mind is type-testing:

def isAString(anobj): return type(anobj) is type('')

However, this approach is not appropriate, as it wilfully destroys one of Python’s greatest strengths—smooth, signature-based polymorphism. Using the isinstance built-in function, which can accept a type argument in Python 2.0 or later, is only marginally better:

def isAString(anobj): return isinstance(anobj, type(''))

This does accept instances of subclasses of type str (in Python 2.2 or better), but it still miserably fails to accept such clearly string-like objects as instances of UserString.UserString and Unicode strings. What you really want is a way to check if some object is string-like (i.e., whether it behaves like a string):

def isStringLike(anobj):
    try: anobj + ''
    except: return 0
    else: return 1

Discussion

If it walks like a duck, and quacks like a duck, it’s duck-like enough for our purposes. The isStringLike function in this recipe goes only as far as the “quacks like” part, but that’s still far better than the disastrous attempts at rigorous duckhood-checking in the two unacceptable functions named isAString in the solution. It’s easy to test a few more properties by using a richer expression in the try clause, if and when you need to ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Start your free trial

You might also like

Modern Python Cookbook - Second Edition

Modern Python Cookbook - Second Edition

Steven F. Lott
Python Cookbook, 3rd Edition

Python Cookbook, 3rd Edition

David Beazley, Brian K. Jones

Publisher Resources

ISBN: 0596001673Supplemental ContentCatalog PageErrata