scriptdiddy scriptdiddy - 3 months ago 16
Python Question

Python Try Catch Block inside lambda

Is it possible to use try catch block inside of a lambda function. I need the lambda function to convert a certain variable into an integer, but not all of the values will be able to be converted into integers.

Answer

Nope. A Python lambda can only be a single expression. Use a named function.

It is convenient to write a generic function for converting types:

def tryconvert(value, default, *types):
    for t in types:
        try:
            return t(value)
        except ValueError, TypeError:
            continue
    return default

Then you can write your lambda:

lambda v: tryconvert(v, 0, int)

You could also write tryconvert() so it returns a function that takes the value to be converted; then you don't need the lambda:

def tryconvert(default, *types):
    def convert(value):
        for t in types:
            try:
                return t(value)
            except ValueError, TypeError:
                continue
        return default
     return convert

Now tryconvert(0, int) returns a function, convert(), that takes a value and converts it to an integer, and returns 0 if this can't be done.