2015-09-25 6 views
5

निम्नलिखित उदाहरण बहुत सरल है। मैं मानचित्र() निष्पादन के साथ निष्पादित करना चाहता हूं जो निष्पादन को बढ़ा सकता है। यह एक उदाहरण के साथ और अधिक स्पष्ट रूप हो जाएगा:पायथन नक्शा अपवाद मैपिंग निष्पादन जारी रखें

number_list = range(-2,8) 

def one_divide_by(n): 
    return 1/n 

try: 
    for number, divide in zip(number_list, map(one_divide_by, number_list)): 
     print("%d : %f" % (number, divide)) 
except ZeroDivisionError: 
    # Execution is stopped. I want to continue mapping 
    pass 

मुझे इस कोड को निष्पादित मैं:

-2 : -0.500000 
-1 : -1.000000 

यह मेरी सूची में 0 की वजह से है। मैं यह 0 नहीं हटाना चाहता (क्योंकि वास्तविक मामले में मैं पहले नहीं जान सकता अगर मुझे अपवाद मिलेगा)। क्या आप जानते हैं कि अपवाद के बाद मैपिंग जारी रखें?

+0

आप जानते हैं कि क्या मूल्य के लिए स्थानापन्न करने 'अनंत' तो का उपयोग 'प्रयास करें: वापसी 1/एन; ZeroDivisionError को छोड़कर: अपनाvalue' – Pynchia

उत्तर

3

आप अपने समारोह में (के बजाय में for पाश) अपवाद पकड़ सकते थे और None वापसी (या जो भी आप चुनते हैं) यदि ZeroDivisionError उठाया है:

def one_divide_by(n): 
    try: 
     return 1/n 
    except ZeroDivisionError: 
     return None 

अगर आप return None के लिए चुनते हैं आप अनुकूलित करने की आवश्यकता आपकी प्रारूप स्ट्रिंग; None को %f के साथ स्वरूपित नहीं किया जा सकता है।

अन्य मूल्यों तुम वापस सकता है (और है कि अपने स्ट्रिंग स्वरूपण के साथ संगत होगा) float('inf') या float('nan') (या float('-inf') अपने अंश के हस्ताक्षर के आधार पर) कर रहे हैं - "inf inity" या "n OT एकएन umber "।

here आपको float('inf') का उपयोग करने की कुछ चेतावनियां मिलेंगी।

+1

वापस करें मुझे लगता है कि 'फ्लोट (' नान ') लौटने का शायद यहां सबसे अच्छा विकल्प है। लेकिन मुझे लगता है कि यह उल्लेख किया जाना चाहिए कि आपको [math.isnan()] (https://docs.python.org/3/library/math.html?highlight=math.isnan#math.isnan) का उपयोग करने की आवश्यकता है परीक्षण 'नान'। –

+0

धन्यवाद! यह काम करता हैं – jedema

2

आप फ़ंक्शन के अंदर try/except ब्लॉक स्थानांतरित कर सकते हैं। उदाहरण -

def one_divide_by(n): 
    try: 
     return 1/n 
    except ZeroDivisionError: 
     return 0 #or some other default value. 

और फिर/सामान्य रूप से इस फोन ब्लॉक को छोड़कर एक कोशिश के बिना, -

for number, divide in zip(number_list, map(one_divide_by, number_list)): 
    print("%d : %f" % (number, divide)) 
संबंधित मुद्दे