2012-09-16 54 views
24

是否可以在lambda函数内部使用try catch块。我需要lambda函数将某个变量转换为整数,但不是所有的值都能够转换为整数。Python在lambda中尝试捕获块

+0

http://stackoverflow.com/questions/7108193/frequently-repeated-try-except-in-python – squiguy

+1

你不_need_ lambda函数。只需在它的位置使用一个命名的函数 –

回答

37

没有。 Python lambda只能是单个表达式。使用一个命名的函数。

可以很方便地编写类型转换的通用功能:

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

然后,你可以写你的λ:

lambda v: tryconvert(v, 0, int) 

你也可以写tryconvert()所以回报一个函数,将价值转化;那么你不需要拉姆达:

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

现在tryconvert(0, int)返回一个函数,convert(value),这需要一个值,并将其转换为整数,并返回0如果不能这样做。

9

在这种特定的情况下,可以避免使用try块这样的:

lambda s: int(s) if s.isdigit() else 0 

isdigit() string method返回true如果s所有字符是数字。 (如果你需要接受负数,你将不得不做一些额外的检查)

1

根据您的需要,另一种方法可以保持尝试:拉姆达FN外抓

toint = lambda x : int(x) 
strval = ['3', ''] 

for s in strval: 
    try: 
     print 2 + toint(s) 
    except ValueError: 
     print 2 

输出:

5 
2