Gå til innhold

2. Spesifiser Exceptions

På forrige side ble det håndtert en exception av type Exception, dette er ikke bra, med mindre man har dårlig tid og ikke vil gjøre ting skikkelig.

Når man skal gjøre enkle ting, så er det best å spesifisere der det lar seg gjøres. En generell Exception gjør blant annet at en bruker ikke kan lukke programmet!

def enter_a_numberinator() -> int:
    while True:
        try:
            return int(input('Enter a number: '))
        except ValueError:
            print('That is not a number, try again')
        except Exception:
            # Bruker har prøvd å avslutte programmet, dette er ikke lov
            print('You can\'t leave, you\'re stuck here forever')

n = enter_a_numberinator()
print(n)

Les dokumentasjonen!

Ved å lese dokumentasjonen, eller via eksperimentering (f.eks. dra ut nettverket), kan du finne riktig exceptions å bruke.

Her er et eksempel med do_request funksjonen fra forrige side:

def do_request(url):
    try:
        return requests.get(url)
    # HTTPError håndterer alle statuskoder mellom 400 og 599
    except requests.exceptions.HTTPError:
        return do_request(url)
    # ConnectionError håndterer alle nettverksfeil
    except requests.exceptions.ConnectionError:
        return do_request(url)
    # Timeout håndterer alle timeout-feil
    except requests.exceptions.Timeout:
        return do_request(url)
    # TooManyRedirects håndterer alle redirect-feil
    except requests.exceptions.TooManyRedirects:
        return do_request(url)
    # Alle andre feil, (bør unngås)
    # except Exception:
    #    return do_request(url)

Man kan også samle exceptions slik:

1
2
3
4
5
6
7
8
def do_request(url):
    try:
        return requests.get(url)
    except (requests.exceptions.HTTPError,
            requests.exceptions.ConnectionError,
            requests.exceptions.Timeout,
            requests.exceptions.TooManyRedirects):
        return do_request(url)

1 år siden 1 år siden GitHub Sondre Grønås