Bir satırda birden fazla istisnayı nasıl yakalarım (blok hariç)
Bunu yap:
try:
may_raise_specific_errors():
except (SpecificErrorOne, SpecificErrorTwo) as error:
handle(error) # might log or have some other default behavior...
Hata nesnesini bir ada atamak için virgül kullanan eski sözdizimi nedeniyle parantez gerekir. as
Anahtar kelime atama için kullanılır. Hata nesnesi için herhangi bir isim kullanabilirsiniz, ben error
şahsen tercih ederim .
En iyi pratik
Bunu şu anda ve Python ile uyumlu bir şekilde yapmak için, İstisnaları virgülle ayırmanız ve bir istisna türünü yakalanacak İstisna türünü izleyerek istisna örneğini bir değişken adına atayan önceki sözdiziminden ayırt etmek için parantez ile sarmanız gerekir. virgül.
İşte basit kullanım örneği:
import sys
try:
mainstuff()
except (KeyboardInterrupt, EOFError): # the parens are necessary
sys.exit(0)
Karşılaştığımda tam yığın izini beklediğim hataları gizlemekten kaçınmak için yalnızca bu istisnaları belirtiyorum.
Bu, burada belgelenmiştir: https://docs.python.org/tutorial/errors.html
İstisnayı bir değişkene atayabilirsiniz ( e
yaygındır, ancak uzun istisna işlemeniz varsa veya IDE'niz yalnızca benimki gibi bundan daha büyük seçimleri vurgularsa daha ayrıntılı bir değişkeni tercih edebilirsiniz.) Örneği bir args özniteliğine sahiptir. İşte bir örnek:
import sys
try:
mainstuff()
except (KeyboardInterrupt, EOFError) as err:
print(err)
print(err.args)
sys.exit(0)
Python 3'te, blok sonuçlandığında err
nesnenin kapsam dışında kaldığını unutmayın except
.
Kaldırıldı
Hatayı virgülle atayan bir kod görebilirsiniz. Python 2.5 ve önceki sürümlerde kullanılabilen tek form olan bu kullanım kullanımdan kaldırılmıştır ve kodunuzun Python 3'te ileriye doğru uyumlu olmasını istiyorsanız, sözdizimini yeni formu kullanacak şekilde güncellemelisiniz:
import sys
try:
mainstuff()
except (KeyboardInterrupt, EOFError), err: # don't do this in Python 2.6+
print err
print err.args
sys.exit(0)
Kod tabanınızda virgül adı ataması görürseniz ve Python 2.5 veya üstünü kullanıyorsanız, yeni sürüme geçerek yeni sürüme geçin, böylece yükseltme yaptığınızda kodunuz uyumlu kalır.
suppress
bağlam yöneticisi
Kabul edilen cevap gerçekten minimum 4 satır koddur:
try:
do_something()
except (IDontLikeYouException, YouAreBeingMeanException) as e:
pass
try
, except
, pass
Hatlar tek bir şekilde ele alınabilir Python 3.4 uygun bastırmak bağlam yöneticisi :
from contextlib import suppress
with suppress(IDontLikeYouException, YouAreBeingMeanException):
do_something()
pass
Belirli istisnalar dışında kullanmak istediğinizde suppress
.