Hlelp clean up clumpsy code

Jp Calderone exarkun at divmod.com
Tue Jan 4 11:43:34 EST 2005



On Tue, 04 Jan 2005 08:18:58 -0800, Scott David Daniels <scott.daniels at acm.org> wrote:
>Nick Coghlan wrote:
> > A custom generator will do nicely:
> > 
> > Py> def flatten(seq):
> > ...   for x in seq:
> > ...     if hasattr(x, "__iter__"):
> > ...       for y in flatten(x):
> > ...         yield y
> > ...     else:
> > ...       yield x
> 
> Avoiding LBYL gives you:
>      def flatten(seq):
>          for x in seq:
>              try:
>                  for y in flatten(x):
>                      yield y
>              except TypeError:
>                  yield x

  But totally messes up on error handling.  Instead:

    def flatten(seq):
        for x in seq:
            try:
                subseq = iter(x)
            except TypeError:
                yield x
            else:
                for subx in flatten(subseq):
                    yield subx

  to avoid catching TypeErrors from .next().

  Jp



More information about the Python-list mailing list