On Wed, 12 Nov 2008 08:06:31 -0700, Joe Strout wrote: > Let me preface this by saying that I think I "get" the concept of duck- > typing. > > However, I still want to sprinkle my code with assertions that, for > example, my parameters are what they're supposed to be -- too often I > mistakenly pass in something I didn't intend, and when that happens, I > want the code to fail as early as possible, so I have the shortest > possible path to track down the real bug.
I'm surprised nobody has pointed you at Alex Martelli's recipe here: http://code.activestate.com/recipes/52291/ While the recipe is great, it can be tiresome to apply all the time. I would factor out the checks into a function, something like this: def isstringlike(obj, methods=None): """Return True if obj is sufficiently string-like.""" if isinstance(obj, basestring): return True if methods is None: methods = ['upper', 'lower', '__len__', '__getitem__'] for method in methods: if not hasattr(obj, method): return False # To really be string-like, the following test should pass. if len(obj) > 0: s = obj[0] if s[0] != s: return False return True -- Steven -- http://mail.python.org/mailman/listinfo/python-list