2013-11-28 16 views
8

शायद मैं documentation में कुछ नहीं देख रहा हूं।फ्लास्क में सभी अपवादों को कैसे रोकें?

मैं कुछ http त्रुटियों को संभालना नहीं चाहता, बल्कि सभी अपवादों को संभालना चाहता हूं। कारण - मैं अपने स्वयं के कस्टम तर्क का उपयोग करके उन्हें लॉग करना चाहता हूं (पहिया को फिर से शुरू करने की तरह लगता है, लेकिन मुझे लॉगिंग पर पूर्ण नियंत्रण की आवश्यकता है। मैं सर्वर को अपने घुटनों पर अपवाद पर नहीं लेना चाहता, लेकिन केवल उस विशेष अनुरोध पर बम ।

यह कैसे मैं अब बोतल लांच है। यहाँ app.run सर्वर शुरू होता है। मैं कैसे निर्देश दे सकते हैं कि यह मेरे अपवाद संचालक विधि कॉल करने के लिए जब भी एक अपवाद तब होता है?

def main(): 
    args = parse_args() 
    app.config['PROPAGATE_EXCEPTIONS'] = True 
    flask_options = {'port' : args.port} 
    if args.host == 'public': 
     flask_options['host'] = '0.0.0.0' 
    app.run(**flask_options) 

if __name__ == '__main__': 
    _sys.exit(main()) 

उत्तर

14

आप errorhandler का उपयोग करना चाहिए, प्रलेखन http://flask.pocoo.org/docs/patterns/errorpages/#error-handlers देखना और http://flask.pocoo.org/docs/api/#flask.Flask.errorhandler। यह आपको प्रेषकों में उठाए गए सभी अपवादों की अनुमति देता है, लेकिन त्रुटि हैंडलरों में अपवादों को संभाल नहीं सकता है। उदाहरण के लिए सभी अपवाद:

@app.errorhandler(Exception) 
def all_exception_handler(error): 
    return 'Error', 500 

मैं इस मामले के लिए स्पष्ट अपवाद हैंडलर या सजावटी (कक्षा आधारित विचार) का उपयोग कैसे करता हूं।

+2

यह हाल के संस्करणों में अब काम नहीं करता है। 0.12 में मुझे फिर से HTML त्रुटि पृष्ठ मिल रहे हैं। – bwind

+0

@bwind कोई विचार है कि आपको 0.12 में समान तर्क कैसे लागू करना चाहिए? –

+0

@TukukMustonen: हाँ, मेरा जवाब यहां एक अलग प्रश्न पर देखें: http://stackoverflow.com/questions/29332056/global-error-handler-for-any-exception/41655397#41655397 – bwind

संबंधित मुद्दे