Python için genel yakalama


89

Sessiz istisnalarla sonuçlanan son derece garip davranışlarım var. Tüm istisnalarda hata ayıklayabileceğim genel bir deneme yakalama işlemini nasıl yazabilirim. Şu çizgide bir şey:

try:
    # something that fails
except e:
    print e

Eldeki sorun hakkında ayrıntılı olarak biraz daha:

Bilgisayarımda (Ubuntu Linux 8.10) hem çalıştırma sunucusu hem de mod-python aracılığıyla iyi çalışan bir Django uygulamam var. Dağıtım sunucusunda (Ubuntu Linux 8.10), çalıştırma sunucusu aracılığıyla iyi çalışır, ancak mod-python'da apache aracılığıyla başarısız olur.

Nedeni, Berkeley DB (bsddb.db) ve ikincil anahtarlar kullanan uygulamanın bir kısmına indirdim. İkincil anahtarlar için geri arama yöntemi, anahtarları biçimlendirmek için turşu kullanır. Tek bir değer için turşu çağırdığımda başarısız oluyor. Ancak, yalnızca cPickle kullandığımda başarısız oluyor ve geri arama işlevi dışında aynı değerler üzerinde turşu kullanmak da çalışıyor.

Sadece cPickle ile neden başarısız olduğunu bilmek istiyorum.

Yanıtlar:


169

İstisnalar, program sonlandırılmadan önce varsayılan olarak zaten yazdırılır. Hatayı başka bir yere göndermek istiyorsanız (yazdırmak değil), bunu yapabilirsiniz:

try:
    something()
except Exception as e:
    send_somewhere(traceback.format_exception(*sys.exc_info()))
    raise # reraises the exception

asanahtar sözcüğünü kullanan bu biçimin python> 2.6 için olduğunu unutmayın . Eski yöntem şuydu:

except Exception, e:

5
"e olarak istisna" değişikliğini bilmiyordum. "İstisna, e" her zaman beni rahatsız etti, temizlendiğini görmek güzel.
monkut

3
'as' anahtar kelimesi python> = 2.6 içindir
pixelbeat

Böyle basit bir çözüm. Yine de iki ayda bir Google'da aradım ve en üstteki bağlantıya tıklayıp buraya geliyorum.
niCk cAMel

3

Traceback modülü tracebacks biçimlendirmek için oldukça yararlıdır. Daha sonra bunu bir günlük dosyasına yazabilirsiniz.


1

Bu çalışıyor mu? :

except BaseException, e:

11
Yakalamamalısınız BaseException- içerir SystemExitve KeyboardInterruptgenellikle yakalamak istemediğiniz şeyler içerir .
nosklo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.