est ici une version révisée du code qui fonctionne encore plus il illustre comment élever un ValueError
la façon dont vous voulez. En passant, je pense que find_last()
, find_last_index()
, ou quelque chose de plus serait un nom plus descriptif pour cette fonction.
def contains(char_string, char):
largest_index = -1
for i, ch in enumerate(char_string):
if ch == char:
largest_index = i
if largest_index > -1: # any found?
return largest_index # return index of last one
else:
raise ValueError('could not find {} in {}'.format(char, char_string))
print(contains('mississippi', 's')) # -> 6
print(contains('bababa', 'k')) # ->
Traceback (most recent call last):
File "how-to-raise-a-valueerror.py", line 15, in <module>
print(contains('bababa', 'k'))
File "how-to-raise-a-valueerror.py", line 12, in contains
raise ValueError('could not find {} in {}'.format(char, char_string))
ValueError: could not find k in bababa
Mise à jour - Une façon
beaucoup plus simple Wow! Voici une version beaucoup plus concise - essentiellement un one-liner - qui est aussi probablement plus rapide car elle inverse (via [::-1]
) la chaîne avant de faire une recherche en avant pour le premier caractère correspondant et il le fait en utilisant la construction rapide dans la chaîne index()
méthode. En ce qui concerne votre vraie question, une petite commodité de bonus qui vient avec index()
est qu'elle soulève déjà un ValueError
lorsque la sous-chaîne de caractère n'est pas trouvée, donc rien de plus n'est requis pour que cela se produise.
Ici, il est ainsi un test unitaire rapide:
def contains(char_string, char):
# (-1 adjusts returned index to account for searching in reverse)
return len(char_string) - char_string[::-1].index(char) - 1
print(contains('mississippi', 's')) # -> 6
print(contains('bababa', 'k')) # ->
Traceback (most recent call last):
File "better-way-to-raise-a-valueerror.py", line 9, in <module>
print(contains('bababa', 'k'))
File "better-way-to-raise-a-valueerror", line 6, in contains
return len(char_string) - char_string[::-1].index(char) - 1
ValueError: substring not found
Quelle est votre question? – Falmarri
comment puis-je augmenter un ValueError – user531225
Juste comme ça, augmenter ValueError() hahaha – slezica