Komentáře k článku

Kde se asi stala chyba: obsluha výjimek v Pythonu

Python, stejně jako většina moderních programovacích jazyků, obsluhuje chyby vzniklé za běhu pomocí výjimek. Pro každého programátora v Pythonu je blok try … except základem všeho bytí. V tomto článku se podíváme na ukázkový kód, který se zdá naprosto v pořádku, ale přesto obsahuje naprosto zásadní chybu.

Zpět na článek

6 komentářů k článku Kde se asi stala chyba: obsluha výjimek v Pythonu:

  1. potapec

    Jak jsem jiz uvedl v komentari pod predchozim clankem, nasledujici zapis je chybuvzdorny:

    AuthError = ( webmod.auth.UserNotFound, webmod.auth.WrongPassword )
    try:
    ...
    except AuthError, e:
    ...
    
    1. pepa

      Re:
      Ta proměnná je tam vcelku zbytečná.

      try:
          ...
      except (webmod.auth.UserNotFound, webmod.auth.WrongPassword) as e:
          ...
      

      A ještě je lepší dát výjímkám společnou base třídu a pak odchytávat jenom tu.

      class AuthException(Exception):
          pass
      class UserNotFound(AuthException):
          pass
      class WrongPassword(AuthException):
          pass
      
      try:
          ...
      except AuthException as e:
          ...
      
      1. IT expert

        Re:
        Promenna tam neni zbytecna. Hrozi, ze clovek zapmene na zavorky (zejmena v Py2.x) a jsme zpatky u puvodniho problemu.

        A ještě je lepší dát výjímkám společnou base třídu a pak odchytávat jenom tu.
        Jiste, pokud si vyjimky definujete svoje. Ale pokud pouzivate vyjimky z knihovny, tak tezko..

          1. Jan ŠvecAutor příspěvku

            Re:
            Unit testy v tomto případě nejsou samospásné – pokud se v unit testu podaří trefit pořadí jako v prvním výstupu, pak je vše v pořádku a testem nic neodhalíme.

  2. Martin Kubát @COEX

    Díky za to!
    Zdravím z Plzně do Plzně ;-) a díky za upozornění na tuto zvláštnost.
    Věřím, že tato finta může způsobit krásné, leč bezesné noci.
    MK

Napsat komentář

Tato diskuse je již příliš stará, pravděpodobně již vám nikdo neodpoví. Pokud se chcete na něco zeptat, použijte diskusní server Devel.cz

Zdroj: https://www.zdrojak.cz/?p=13280