2012-09-16 84 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