Vuoto tranne blocco vs enorme tranne blocco

0

Quale di questi è più facile da leggere?

Un blocco except vuoto:

try:
    foo = do_foo()
except FooError:
    pass  # see below
else:
    return do_bar(foo)
# Recover from the FooError (long, complicated)

O questo:

try:
    foo = do_foo()
except FooError:
    # Recover from the FooError (long, complicated)
else:
    return do_bar(foo)

Si noti che il recupero è significativamente più complesso rispetto al blocco else su una riga. Può di per sé comportare blocchi dentellati o altre complicazioni. La prima opzione ha il vantaggio di eliminare un livello di indentazione. Ma la seconda opzione è probabilmente più vicina a ciò che lo sviluppatore medio si aspetta di vedere. Sono incerto su quale di queste preoccupazioni sia più importante per la leggibilità.

    
posta Kevin 28.01.2015 - 22:47
fonte

2 risposte

3

Penso che tu sia preciso riguardo al trade-off in questione - nessuno dei due è l'ideale. Di questi due, personalmente preferisco il primo dal momento che il flusso di controllo è più facile da seguire.

Detto questo, suggerirei di prendere in considerazione una terza opzione che non hai menzionato: estrapola tutta o parte della logica di recupero in una funzione separata. Ciò mantiene il flusso di controllo semplice ed evita di avere un grosso blocco di codice di recupero nella clausola except.

    
risposta data 28.01.2015 - 22:57
fonte
3

Esplicito è meglio di implicito.

Se gestisci un'eccezione, gestiscila. Proprio lì, proprio allora.

    
risposta data 28.01.2015 - 22:59
fonte

Leggi altre domande sui tag