Bir sat─▒rda birden fazla istisna yakalay─▒n (blok hari├ž)


Al─▒nan cevaba git


Yapabilece─čimi biliyorum:

 try:
    # do something that may fail
except:
    # do this if ANYTHING goes wrong
 

Bunu da yapabilirim:

 try:
    # do something that may fail
except IDontLikeYouException:
    # say please
except YouAreTooShortException:
    # stand on a ladder
 

Ancak ayn─▒ ┼čeyi iki farkl─▒ istisna i├žinde yapmak istersem, ┼ču anda d├╝┼č├╝nebildi─čim en iyi ┼čey bunu yapmakt─▒r:

 try:
    # do something that may fail
except IDontLikeYouException:
    # say please
except YouAreBeingMeanException:
    # say please
 

B├Âyle bir ┼čey yapabilece─či herhangi bir ┼čekilde (eylem hem istisnalar almak beri etmektir var m─▒ say please ):

 try:
    # do something that may fail
except IDontLikeYouException, YouAreBeingMeanException:
    # say please
 

┼×imdi bu ger├žekten i┼če yaramaz, ├ž├╝nk├╝ ┼ču s├Âzdizimiyle e┼čle┼čir:

 try:
    # do something that may fail
except Exception, e:
    # say please
 

Bu y├╝zden, iki farkl─▒ istisnay─▒ yakalama ├žabam tam olarak ortaya ├ž─▒kmad─▒.

Bunu yapman─▒n bir yolu var m─▒?


2474









Cevap say─▒s─▒n─▒ say: 5






G├Ânderen Python Belgeler :

Bir istisna c├╝mlesi parantezli bir demet olarak birden fazla istisna adland─▒rabilir, ├Ârne─čin

 except (IDontLikeYouException, YouAreBeingMeanException) as e:
    pass
 

Veya, yaln─▒zca Python 2 i├žin:

 except (IDontLikeYouException, YouAreBeingMeanException), e:
    pass
 

─░stisnalar─▒ de─či┼čkenden virg├╝lle ay─▒rmak Python 2.6 ve 2.7'de ├žal─▒┼čmaya devam eder, ancak ┼čimdi kullan─▒mdan kald─▒r─▒lm─▒┼čt─▒r ve Python 3'te ├žal─▒┼čmaz; ┼čimdi kullanmal─▒s─▒n as .


3361







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...
 

Parantezler, hata nesnesini bir isme atamak i├žin virg├╝lleri kullanan eski s├Âzdizimi nedeniyle gereklidir. 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 ileri Python ile uyumlu bir ┼čekilde yapmak i├žin, ─░stisnalar─▒ virg├╝llerle ay─▒rman─▒z ve bunlar─▒, istisna ├Ârne─čini bir de─či┼čkenle isimlendirmek i├žin ─░stisna t├╝r├╝n├╝ izleyerek bir de─či┼čken ad─▒na atayan ├Ânceki s├Âzdiziminden farkl─▒la┼čt─▒rmak i├žin parantezlerle sarman─▒z gerekir. virg├╝l.

─░┼čte basit kullan─▒m ├Ârne─či:

 try:
    mainstuff()
except (KeyboardInterrupt, EOFError): # the parens are necessary
    quit(0)
 

Hatalar─▒n gizlenmesini ├Ânlemek i├žin sadece bu istisnalar─▒ belirtiyorum, kar┼č─▒la┼č─▒rsam tam y─▒─č─▒n izini beklerim.

Bu burada belgelenmi┼čtir: https://docs.python.org/tutorial/errors.html

Bir istisnay─▒ bir de─či┼čkene atayabilirsiniz, ( e yayg─▒nd─▒r, ancak uzun istisna i┼čleme kullan─▒yorsan─▒z veya IDE'niz yaln─▒zca benimkinden daha b├╝y├╝k olan se├žimleri vurgularsa, daha ayr─▒nt─▒l─▒ bir de─či┼čken tercih edebilirsiniz). ─░┼čte bir ├Ârnek:

 try:
    mainstuff()
except (KeyboardInterrupt, EOFError) as err: 
    print(err)
    print(err.args)
    quit(0)
 

Python 3'te blok tamamland─▒─č─▒nda err nesnenin kapsam d─▒┼č─▒na ├ž─▒kt─▒─č─▒n─▒ unutmay─▒n except .

Kald─▒r─▒ld─▒

Bir virg├╝l ile hatay─▒ atan kodu g├Ârebilirsiniz. Python 2.5 ve daha ├Ânceki s├╝r├╝mlerde bulunan tek kullan─▒m olan bu kullan─▒m kullan─▒mdan kald─▒r─▒lm─▒┼čt─▒r ve kodunuzun Python 3'te ileriye uyumlu olmas─▒n─▒ istiyorsan─▒z, yeni formu kullanmak i├žin s├Âzdizimini g├╝ncellemelisiniz:

 try:
    mainstuff()
except (KeyboardInterrupt, EOFError), err: # don't do this in Python 2.6+
    print err
    print err.args
    quit(0)
 

Kod ├╝ss├╝n├╝zde virg├╝l ad─▒ atamas─▒n─▒ g├Âr├╝rseniz ve Python 2.5 veya daha ├╝st├╝n├╝ kullan─▒yorsan─▒z, y├╝kseltme yaparken kodunuzun uyumlu kalmas─▒n─▒ sa─člamak i├žin bunu yapman─▒n yeni yoluna ge├žin.

suppress ba─člam y├Âneticisi

Kabul edilen cevap ger├žekten 4 kod sat─▒r─▒d─▒r, minimum:

 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()
 

Bu nedenle pass , baz─▒ istisnalar d─▒┼č─▒nda istedi─činizde kullan─▒n suppress .


267







G├Ânderen Python belgelerine -> 8.3 ─░stisnalar :

Bir try ifade, farkl─▒ istisnalar i├žin i┼čleyicileri belirtmek ├╝zere, madde d─▒┼č─▒nda birden fazla maddeye sahip olabilir. En fazla bir i┼čleyici ├žal─▒┼čt─▒r─▒lacak. ─░┼čleyiciler, ayn─▒ try ifadesinin di─čer i┼čleyicilerinde de─čil, yaln─▒zca kar┼č─▒l─▒k gelen deneme yan t├╝mcesinde ortaya ├ž─▒kan istisnalar─▒ i┼čler. Bir istisna c├╝mlesi parantezli bir demet olarak birden fazla istisna adland─▒rabilir, ├Ârne─čin:

 except (RuntimeError, TypeError, NameError):
    pass
 

Bu parantezin etraf─▒ndaki parantezlerin gerekli oldu─čunu unutmay─▒n, ├ž├╝nk├╝ ValueError, e: normal olarak except ValueError as e: modern Python'da yaz─▒lanlar i├žin kullan─▒lan s├Âzdizimi d─▒┼č─▒nda (a┼ča─č─▒da a├ž─▒klanm─▒┼čt─▒r). Eski s├Âzdizimi geriye d├Ân├╝k uyumluluk i├žin hala desteklenmektedir. Bu ara├žlar except RuntimeError, TypeError e┼čde─čer de─čildir except (RuntimeError, TypeError): ancak except RuntimeError asTypeError: hangi istedi─čini de─čil.


42







S─▒k s─▒k ├žok say─▒da istisna kullan─▒rsan─▒z, bir tuple ├Ânceden tan─▒mlayabilirsiniz, bu y├╝zden defalarca tekrar yazmak zorunda kalmazs─▒n─▒z.

 #This example code is a technique I use in a library that connects with websites to gather data

ConnectErrs  = (URLError, SSLError, SocketTimeoutError, BadStatusLine, ConnectionResetError)

def connect(url, data):
    #do connection and return some data
    return(received_data)

def some_function(var_a, var_b, ...):
    try: o = connect(url, data)
    except ConnectErrs as e:
        #do the recovery stuff
    blah #do normal stuff you would do if no exception occurred
 

NOTLAR:

  1. Ayr─▒ca, ├Ânceden tan─▒mlanm─▒┼č gruptakilerden ba┼čka istisnalar da yakalaman─▒z gerekiyorsa, blok hari├ž ba┼čka bir tan─▒m tan─▒mlaman─▒z gerekir.

  2. E─čer sadece bir global de─či┼čkeni tolere edemezseniz, onu main () 'de tan─▒mlay─▒n ve gerekti─či yere iletin ...


28







Bunu yapman─▒n yollar─▒ndan biri ..

 try:
   You do your operations here;
   ......................
except(Exception1[, Exception2[,...ExceptionN]]]):
   If there is any exception from the given exception list, 
   then execute this block.
   ......................
else:
   If there is no exception then execute this block. 
 

ve di─čer bir yol ise, except blok taraf─▒ndan y├╝r├╝t├╝len g├Ârevi ger├žekle┼čtiren ve yazd─▒─č─▒n─▒z t├╝m except bloklar arac─▒l─▒─č─▒yla ├ža─č─▒ran bir y├Ântem olu┼čturmakt─▒r .

 try:
   You do your operations here;
   ......................
except Exception1:
    functionname(parameterList)
except Exception2:
    functionname(parameterList)
except Exception3:
    functionname(parameterList)
else:
   If there is no exception then execute this block. 

def functionname( parameters ):
   //your task..
   return [expression]
 

─░kincisinin bunu yapman─▒n en iyi yolu olmad─▒─č─▒n─▒ biliyorum, ama bunu yapman─▒n birka├ž yolunu g├Âsteriyorum.


11



─░lgili yay─▒nlar


Windows CMD'de iki komutu bir sat─▒rda nas─▒l ├žal─▒┼čt─▒r─▒r─▒m?

Kabuk i├žinde bir sat─▒rda birden fazla komut ├žal─▒┼čt─▒rma

Birden fazla Linux komutunu bir sat─▒rda birle┼čtir

C++ kullanarak birden fazla de─či┼čkeni bir sat─▒rda nas─▒l ilan edebilir ve tan─▒mlayabilirim?

JavaScript'teki tek sat─▒rl─▒k ifadelerde parantez gerekli midir?

Tek sat─▒rda ├žoklu ifadeler nas─▒l yaz─▒l─▒r?

Python'da bir sat─▒rda birden fazla ├Â─če nas─▒l eklenir

Yuvalanm─▒┼č deneme / bloklar hari├ž bir istisna nas─▒l yeniden olu┼čturulur?

Birden fazla divs bir sat─▒rda nas─▒l g├Âr├╝n├╝r ama yine de geni┼člik korunur?

Bir ifadeyi bir ifadede birden fazla de─čerle kar┼č─▒la┼čt─▒r─▒n

Etiketle ilgili di─čer sorular [python]


Bir ├Ârne─čin s─▒n─▒f ad─▒n─▒ m─▒ al─▒yorsunuz?

Jp d├╝─č├╝m├╝ndeki npm mod├╝lleri nas─▒l kald─▒r─▒l─▒r?

Python tamsay─▒ ++ ile art─▒ [duplicate]

Mevcut bir geri ├ža─č─▒rma API'sini vaatlere nas─▒l d├Ân├╝┼čt├╝r├╝r├╝m?

ASP.NET MVC'deki bir enumdan bir a├ž─▒l─▒r listeyi nas─▒l olu┼čturabilirsiniz?

K├Â┼čeli direktifler - derleme, denetleyici, ├Ân ba─člant─▒ ve son ba─člant─▒ [ne zaman ve nas─▒l kullan─▒l─▒r?

ÔÇťUyar─▒: iPhone uygulamalar─▒ bir armv6 mimarisini i├žermelidirÔÇŁ

Python ile Pandalar'daki CSV dosyas─▒n─▒ okurken UnicodeDecodeError

@ Karakterinin C# de─či┼čken isimlerinde kullan─▒m─▒ / anlam─▒ nedir?

Bir s─▒n─▒f ├╝yesi i┼člev ┼čablonu sanal olabilir mi?