
Jim Jewett wrote:
Probably, but you don't have to use a comprehension.
def g(seq): for e in seq: try: yield float(e) except: pass # whatever, even skipping the element
If you don't need it in generator form, then just collect the results into a list and return that instead of yielding. (And obviously, that for loop doesn't even have to be in a separate (generator or) function at all.)
-jJ
Certainly there are a number of ways to address this without using an exception conditional expression. But it seems each of these would lead to a proliferation of these special functions, as one tries to flexibly address the different exception-value pairs that would be applied to different operations. I could for instance define the function Except: def Except ( seq, nominal_function, function_lookup ): for e in seq: try: yield nominal_function(e) except: (exception_type,exception_message) = sys.exc_info()[:2] if (exception_type in function_lookup): yield function_lookup[exception_type](e) else: raise exception_type, exception_message Then I could write my simple example as: xs = Except( ys, (lambda x: float(x)), {ValueError: (lamba x: float('nan'))} ) So I agree, the behaviour can be produced with the language as-is. But many of the evolutions in the language were not put in to address things that "can't be done", but rather to let them be done in a more concise, robust, and/or elegant way. -- ========================== Jeffrey E. McAninch, PhD Physicist, X-2-IFD Los Alamos National Laboratory Phone: 505-667-0374 Email: mcaninch@lanl.gov ==========================