2012-09-16 15 views
24

के अंदर कैच ब्लॉक का प्रयास करें क्या लैम्ब्डा फ़ंक्शन के अंदर प्रयास पकड़ ब्लॉक का उपयोग करना संभव है। मुझे एक निश्चित चर को एक पूर्णांक में परिवर्तित करने के लिए लैम्ब्डा फ़ंक्शन की आवश्यकता है, लेकिन सभी मान पूर्णांक में परिवर्तित नहीं हो पाएंगे।पाइथन कोशिश करें लैम्बडा

+0

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

+1

आप एक लैम्ब्डा समारोह _need_ नहीं है। बस इसके नाम पर एक नामित फ़ंक्शन का उपयोग करें –

उत्तर

37

नहीं। एक पायथन लैम्ब्डा केवल एक अभिव्यक्ति हो सकता है। नामित फ़ंक्शन का उपयोग करें।

यह परिवर्तित प्रकार के लिए एक सामान्य समारोह में लिखने के लिए सुविधाजनक है:

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 रिटर्न सच अगर सभी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 
संबंधित मुद्दे