Devo causare un ValueError in Python
Domanda
Ho questo codice:
chars = #some list
try:
indx = chars.index(chars)
except ValueError:
#doSomething
else:
#doSomethingElse
Voglio poterlo fare perché non mi piace causare consapevolmente eccezioni:
chars = #some list
indx = chars.index(chars)
if indx == -1:
#doSomething
else:
#doSomethingElse
C'è un modo per farlo?
Soluzione
Nota che quest'ultimo approccio sta andando contro il "pythonic" generalmente accettato filosofia di EAFP, o " È più facile chiedere perdono che autorizzazione. " , mentre il primo lo segue.
Altri suggerimenti
if element in mylist:
index = mylist.index(element)
# ... do something
else:
# ... do something else
Per il caso specifico in cui l'elenco è una sequenza di stringhe a carattere singolo, è possibile ottenere ciò che si desidera modificando in anticipo l'elenco da cercare in una stringa (ad es. '' .join (chars)).
È quindi possibile utilizzare il metodo .find (), che funziona come desiderato. Tuttavia, non esiste un metodo corrispondente per elenchi o tuple.
Un'altra possibile opzione è utilizzare invece un dizionario. ad es.
d = dict((x, loc) for (loc,x) in enumerate(chars))
...
index = d.get(chars_to_find, -1) # Second argument is default if not found.
Questo potrebbe anche funzionare meglio se stai facendo molte ricerche nell'elenco. Se è solo una singola ricerca in un elenco usa e getta, non vale la pena farlo.