2012-07-06 15 views

risposta

143

Dal glossary:

più facile chiedere perdono che il permesso. Questo comune stile di codifica in Python presuppone l'esistenza di chiavi o attributi validi e rileva eccezioni se l'assunzione risulta falsa. Questo stile pulito e veloce è caratterizzato dalla presenza di molte dichiarazioni try e except. La tecnica è in contrasto con lo comune a molti altri linguaggi come C.

Un esempio potrebbe essere un tentativo di accesso a un tasto di dizionario.

EAFP:

try: 
    x = my_dict["key"] 
except KeyError: 
    # handle missing key 

LBYL:

if "key" in my_dict: 
    x = my_dict["key"] 
else: 
    # handle missing key 

La versione LBYL deve cercare la chiave all'interno del dizionario due volte, e potrebbe anche essere considerato un po 'meno leggibile.

+4

abbreviato con alcuni esempi. –

+14

Un miglioramento sarebbe che un altro vantaggio è l'evitare le condizioni di gara ... ad esempio, prova ad aprire un file e se lo ottieni, ce l'hai. Invece di vedere * se riesci a ottenerlo *, prova ad ottenerlo in seguito e renditi conto che nel minuto di tempo tra il controllo e l'accesso, puoi ottenerlo più a lungo. –

+18

Python fornisce anche un modo per evitare entrambi, se il gestore sta semplicemente assegnando un valore predefinito a 'x' quando la chiave non esiste:' x = mydict.get ('chiave') 'restituirà' Nessuno 'if '' key'' non è in' my_dict'; si potrebbe anche fare '.get ('chiave', )', e quindi x verrà assegnato quel qualcosa se la chiave non è nel dizionario. 'dict.setdefault()' e 'collections.defaultdict' sono cose carine per evitare anche l'eccesso di codice. – JAB

Problemi correlati