2013-04-05 19 views
7

Bir süre önce yazılmış bazı piton kodunu okuyorum hariç deneyin ve bu bulundu:piton 0

try: 
    # do some stuff 
except 0: 
    # exception handling stuff 

Ve 0 yollarla dışında değil sadece ne olduğundan emin değilim? Benim tahminlerim var: Bir şey yakalamam gerekiyordu, yani istisnanın yayılmasına izin verdiler ya da hata ayıklama modunu açmak ve kapatmak için bir çeşit anahtar olabilir.

Herkes bir fikir verebilir mi? Bir google arama hiçbir şey vermedi ...

Teşekkürler! (Istek üzerine)

Bazı örnek kod: Anladığım kadarıyla

  try: 
       if logErrors: 
        dbStuffer.setStatusToError(prop_id, obj) 
        db.commit() 
      except 0: 
       traceback.print_exc() 
+2

"0" dışında yazılmadığından emin misiniz? (kolonun yerleştiğine dikkat edin) – NPE

+0

NPE Ben pozitifim, şu an diferansiye bakıyorum. Ama şunu kabul ediyorum: 0, şu istisnaya denk gelir: pass? – mlnyc

+0

Çalışırken herhangi bir hata alıyor musunuz? –

cevap

2

Bu yer tutucu olarak örnekte 0 eylemleri

(istisna tipini yakalamak hata ayıklama amacıyla) çok yararlıdır İstisna türünü belirlemek için.

>>> try: 
... x = 5/1 + 4*a/3 
... except 0: 
... print 'error' 
... 
Traceback (most recent call last): 
    File "<stdin>", line 2, in <module> 
NameError: name 'a' is not defined 
>>> try: 
... x = 5/0 + 4*a/3 
... except 0: 
... print 'error' 
... 
Traceback (most recent call last): 
    File "<stdin>", line 2, in <module> 
ZeroDivisionError: integer division or modulo by zero 

İlk durumda, istisna NameError ve ikinci ZeroDivisionError olduğunu. 0, yakalanan herhangi bir özel durum türü için yer tutucu görevi görür. Gönderen

>>> try: 
... print 'error' 
... except: 
... 
KeyboardInterrupt 
>>> try: 
... x = 5/0 + 4*a/3 
... except: 
... print 'error' 
... 
error 
+1

Bu sadece 'try'-'except' ifadesine sahip olmamakla aynı şey. '0 hariç:' aslında burada hiçbir şey yapmıyor. – omz

+0

a 'yükseltme 'istisnasının yeniden yükseltilmesi için istisna bloğunda bir şey yapmazdı –

+0

Bunu yapmak için bir (potansiyel olarak uzun) kod bloğunu yeniden biçimlendirmekle kurtarıyor, ancak bu yüzden hata ayıklama referansını tahmin ediyorum). – FatalError

1

Python docs:

"[...] fıkra çıkan nesne ise istisna maçları [hariç]‘istisna’uyumlu bir nesne istisna eğer o ile uyumludur. istisna nesnesi veya istisna ile uyumlu bir öğe içeren bir tuple sınıfı veya temel sınıfıdır. "

Gerçekten de, ifadenin türü, özel koşulların özel durumla eşleşip eşleşmediğini belirlemek için kullanılır. 0'un bir tamsayı türünde olması ve bu türün istisnası eşleşir.

Tamsayılar istisna olarak yükseltilemediğinden, bu hiçbir şey yakalamayacak bir except sınıfıdır.

+1

python'da tamsayı istisnalarını kaldıramazsınız. 'TypeError: istisnalar eski stil sınıfları olmalı veya 2.7.3 –

+0

@AhmedAeonAxan'da değil, ınternException türetilmiş olmalıdır. Sadece denedim. Cevap düzenlendi. – Ber

+0

Sanırım bir noktada (uzak geçmişte) int '', '' else '' maddesinde kodu tetiklemiş olabileceğini düşündüğüm int, 0 '' ı başarabildiniz. Artık bu ifade ** çalışma zamanı ** 'daki bir istisnayı artırıyor, ancak ** ayrıştırma zamanı ** değil, bu nedenle kod hiç güncellenmemiş olabilir. [reference1] (http://docs.python.org/release/2.3/ref/raise.html) [reference2] (http://docs.python.org/release/2.3/ref/try.html) – mgilson