2012-12-19 9 views
167

में "raise" कीवर्ड का उपयोग कैसे करें मैंने "raise" की आधिकारिक परिभाषा पढ़ी है, लेकिन मुझे अभी भी यह समझ में नहीं आता कि यह क्या करता है।पायथन

सरल शब्दों में, "raise" क्या है?

उदाहरण उपयोग मदद करेगा।

+20

यह 'कुछ अन्य भाषाओं में throw' के रूप में जाना जाता है। – voithos

उत्तर

214

इसमें 2 उद्देश्य हैं।

yentup has given the first one.

यह अपनी खुद की त्रुटियों को ऊपर उठाने के लिए प्रयोग किया जाता है। इतना है कि यह अप कॉल स्टैक आगे संभाला जा सकता है

if something: 
    raise Exception('My error!') 

दूसरा, अपवाद संचालक में वर्तमान अपवाद reraise है।

try: 
    generate_exception() 
except SomeException as e: 
    if not can_handle(e): 
    raise 
    handle_exception(e) 
+15

मैंने टाइप किया कि "वैश्विक नाम" त्रुटि को परिभाषित नहीं किया गया है "। पाइथन के लिए नए लोगों के लिए, आपको "अपवाद बढ़ाएं ('मेरी त्रुटि!')"। आप अपने अपवाद नाम के साथ "त्रुटि" को प्रतिस्थापित करते हैं। मानक अपवादों की एक सूची यहां आप उपयोग कर सकते हैं: http://docs.python.org/2/library/exceptions.html –

+2

ध्यान दें कि पायथन 3.x में नया वाक्यविन्यास है 'कुछ अपवाद को छोड़कर ई: ' – user1735003

+0

@ user1735003 , 'ई' के रूप में क्या करता है? 'कुछ अपवाद' को छोड़कर यह अलग कैसे है? –

28

इसका उपयोग त्रुटियों को बढ़ाने के लिए किया जाता है।

if something: 
    raise Exception('My error!') 

कुछ उदाहरण here

6

raise एक अपवाद उठाया जा कारण बनता है। कुछ अन्य भाषा इसके बजाय क्रिया 'फेंक' का उपयोग करती हैं।

यह एक त्रुटि स्थिति सिग्नल करने का इरादा है; यह झंडे कि सामान्य प्रवाह के लिए स्थिति असाधारण है।

try, except संयोजन का उपयोग करके उठाए गए अपवादों को कोड 'अपस्ट्रीम' (आसपास के ब्लॉक, या स्टैक पर पहले एक फ़ंक्शन) द्वारा फिर से पकड़ा जा सकता है।

6

आप त्रुटि-जांच के हिस्से के रूप में त्रुटियाँ बढ़ाने के लिए उपयोग कर सकते हैं: या

if (a < b): 
    raise ValueError() 

कुछ त्रुटियों को संभालने, और फिर उन्हें त्रुटि हैंडलिंग के हिस्से के रूप में पारित:

try: 
    f = open('file.txt', 'r') 
except IOError: 
    # do some processing here 
    # and then pass the error on 
    raise 
17

raise बिना किसी तर्क के पाइथन वाक्यविन्यास का एक विशेष उपयोग है। इसका मतलब है अपवाद प्राप्त करें और इसे फिर से उठाएं। यदि इस उपयोग को reraise कहा जा सकता था।

raise 

The Python Language Reference से:

कोई भाव मौजूद हैं, बढ़ा पिछले अपवाद है कि वर्तमान क्षेत्र में सक्रिय था फिर से उठाती है।

हैं raise किसी भी तर्क के बिना अकेले प्रयोग किया जाता है सख्ती से reraise -ing के लिए प्रयोग किया जाता है।तो स्थिति यह है कि एक और अपवाद की एक reraise पर नहीं है में किया, तो निम्न त्रुटि दिखाया गया है: RuntimeError: No active exception to reraise

5

raise Exception("message") इसके अलावा और raise अजगर 3 एक नए रूप में पेश किया, raise Exception("message") from e। इसे अपवाद चेनिंग कहा जाता है, यह आपको अपने ट्रेसबैक के साथ मूल अपवाद (मूल कारण) को संरक्षित करने की अनुमति देता है।

यह सी # से आंतरिक अपवादों के समान है।

और जानकारी: https://www.python.org/dev/peps/pep-3134/