Preambolo
Uno dei concetti usati nella scrittura del codice Python è "Più facile chiedere perdono che permesso", alias EAFP . Letteralmente questo significa che invece di fare controlli, se un'operazione è possibile, tu fai l'operazione e "chiedi perdono" se ciò che fai fallisce. Tecnicamente questo significa (solo un esempio senza significato particolare):
try:
obj.x = 10
obj.y = 20
except AttributeError:
pass
Questa tecnica viene spesso utilizzata quando è noto che il codice nel blocco try..except
viene eseguito senza errori nella maggior parte dei casi o se il codice viene eseguito di nuovo. Lo stesso codice con i controlli preliminari apparirebbe come segue:
if hasattr(obj, 'x'):
obj.x = 10
if hasattr(obj, 'y'):
obj.y = 20
Pratiche C ++
Anche se generalmente non è un problema in Python, C ++ ha una "fiamma" di "eredità" di "funzione che restituisce lo stato di errore" rispetto a "generare eccezioni". Questo è stato discusso molto, ma non riesco a trovare alcuna buona fonte di informazione che descriva se il Pyfton-like EAFP è applicabile in Python.
es. considera quanto segue:
if (node.has_element('x')) {
node['x'] = 10;
}
vs
try {
node['x'] = 10;
}
catch(ElementNotFoundException e) {
// pass
}
Quale approccio è generalmente usato nel codice C ++? Se le prestazioni non sono il problema, scriveresti codice in stile EAFP? Grazie.