2013-12-16 26 views
5

Hataları şablonlarda eşlemek için bir errors.py modülüne sahibim. Ben varsayılan bir hata işleyicisi eklemek isteyen ve karşıdan karşıya geldi: http://flask.pocoo.org/mailinglist/archive/2012/7/12/default-error-handler/#cbeb8809dc0da7133f14b99e16f31d6bFlask varsayılan hata işleyicisi çağrılmadı

bir şeyleri modülarize için Blueprint kullanıyorum ve hatalar modülü aşağıdaki eşleştirmeleri sahiptir:

@err.app_errorhandler(403) 
def forbidden(e): 
    return render_template('403.html'), 403 

@err.app_errorhandler(500) 
def serverError(e): 
    return render_template('500.html'), 500 

@err.app_errorhandler(Exception) 
def defaultHandler(e): 
    return render_template('defaultError.html'), e.code 

belirli eşleştirmeleri (403, 500) Onları iptal edersem (ya da onları doğal olarak indüklerse) iyi çalışırım, ancak başka bir şeye (404 vb.) son verirsem defaulHandler() çağrılmaz.

cevap

1

vurulmak için bir neden var. URL'lerimden birine raise Exception eklediğimde onu işaretleyebilir ve ona gidebilirim.

Elbette, 500 hata eşlemeniz varsa, bu durum sunucu tarafında bir hataya dönüşecektir ve bu nedenle bu havzaya düşecektir, bu nedenle bu noktada Yakalama özelliğinin kullanımını göremiyorum (I) 500 errorhandler'un yapamayacağı bir şeyi yakalayacağı durumlar hakkında düşünemiyorum).

0

render_template('defaultError.html') ve e.code'un herhangi bir istisna getirmediğini kontrol edin. Örneğin herhangi senin istisnalar çok basit bir örnek deneyin code özniteliği olabilir emin değilim: Varsayılan işleyici kokan bu yüzden bir 404 aslında şişe kodunda bir istisna bulunmadığını tespit ettik

@err.app_errorhandler(Exception) 
def defaultHandler(e): 
    return 'error handler there', 500 
+0

İstisna yok I (şişeyi dahili sunucu kullanarak çalıştıran) tespit edebilirsiniz gündeme edilmektedir. 500 haritanımın yine de olsa vurulacağını düşünürdüm. – bqui56

+0

Benim için iyi çalışıyor, 'flask == 0.10.1' ve' wergzeug = 0.9.4'. Kullanıcı istisnaları hakkında, kodunuzun neden orada kullanılmadığını inceleyin. Https://github.com/mitsuhiko/flask/blob/master/flask/app.py#L1475. – tbicr

2

Böyle yapabilirsiniz:

app.config['TRAP_HTTP_EXCEPTIONS']=True 
app.register_error_handler(Exception, defaultHandler) 
+0

bu eser, teşekkürler :) – mucio