Gå til innhold

5. Exception Handler

Det kan bli (og er) slitsomt å må håndtere feil hver gang, men heldigvis har Python noe som heter en decorator, som gjør det mulig å pakke en funksjon inni en annen - kjøre kode før / etter og under hver funksjon! (https://www.geeksforgeeks.org/decorators-in-python/)

Hvis vi tar utgangspunkt i exceptions fra forrige side, LoginException, så kan vi lage en dekoratør for funksjoner som vil kunne få slike feil.

En wrapper/dekoratør lager du helt enkelt slik:

from functools import wraps

def handle_login_exception(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        try:
            return func(*args, **kwargs)
        except LoginException as e:
            # Vanligvis ville vi sendt bruker til /login side her :)
            # og eventuelt logget IP og feilmelding
            print(e)

    return wrapper

og den kan du bruke slik, med @ notasjonen (før en funksjon):

@handle_login_exception
def access_page(logged_in: bool, admin: bool):  
    if not logged_in:  
        raise NotLoggedInException()  
    if not admin:  
        raise NotAdminException()  
    print('You are logged in and an admin')

access_page(logged_in=True, admin=False)  
access_page(logged_in=False, admin=False)  
access_page(logged_in=True, admin=True)

Samme resultat, mye mindre kode!

(Og ja, du kan lage en wrapper for @login_required og @admin_required for å gjøre koden ENDA mindre)


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