Paul McGuire <[EMAIL PROTECTED]> wrote: > On Nov 6, 4:08 am, Dustan <[EMAIL PROTECTED]> wrote: >> On Nov 6, 3:58 am, Duncan Booth <[EMAIL PROTECTED]> wrote: >> >> > Wildemar Wildenburger <[EMAIL PROTECTED]> wrote: >> > > maybe something like this could help: >> >> > > def tupleize(non_tuple): >> > > try: >> > > return tuple(tupleize(thing) for thing in non_tuple) >> > > except TypeError: >> > > # non_tuple is not iterable >> > > return non_tuple >> >> > Just don't try passing that a string or anything containing a string. >> >> Untested >> >> def tupleize(non_tuple): >> if isinstance(non_tuple, str): >> return non_tuple >> try: >> return tuple(tupleize(thing) for thing in non_tuple) >> except TypeError: >> # non_tuple is not iterable >> return non_tuple > > > isinstance(x,basestring) > > is preferred over > > isinstance(x,str) > > in case x is a unicode.
Better, just don't try passing it a recursive data structure. >>> a = [1, 2, 3] >>> a[1] = a >>> a [1, [...], 3] >>> tupleize(a) Traceback (most recent call last): File "<pyshell#5>", line 1, in <module> tupleize(a) File "<pyshell#1>", line 5, in tupleize return tuple(tupleize(thing) for thing in non_tuple) File "<pyshell#1>", line 5, in <genexpr> return tuple(tupleize(thing) for thing in non_tuple) File "<pyshell#1>", line 5, in tupleize return tuple(tupleize(thing) for thing in non_tuple) File "<pyshell#1>", line 5, in <genexpr> return tuple(tupleize(thing) for thing in non_tuple) File "<pyshell#1>", line 5, in tupleize return tuple(tupleize(thing) for thing in non_tuple) ... -- http://mail.python.org/mailman/listinfo/python-list