У меня есть этот код, который находит наибольший индекс определенного символа в строке, однако я хотел бы, чтобы он поднимал, ValueError
когда указанный символ не встречается в строке.
Так что примерно так:
contains('bababa', 'k')
приведет к:
→ ValueError: could not find k in bababa
Как я могу это сделать?
Вот текущий код моей функции:
def contains(string,char):
list = []
for i in range(0,len(string)):
if string[i] == char:
list = list + [i]
return list[-1]
Ответы:
raise ValueError('could not find %c in %s' % (ch,str))
источник
raise ValueError
вместоraise ValueError()
?Вот исправленная версия вашего кода, которая все еще работает, плюс она показывает, как поднять
ValueError
так, как вы хотите. Кстати, думаюfind_last()
,find_last_index()
или что-то похожее было бы более наглядным названием для этой функции. Возможная путаница усугубляется тем фактом, что в Python уже есть именованный метод объекта-контейнера,__contains__()
который делает что-то немного другое с точки зрения тестирования членства.Обновление - существенно более простой способ
Вот Это Да! Вот гораздо более краткая версия - по сути, однострочная - которая также, вероятно, быстрее, потому что она меняет (через
[::-1]
) строку перед выполнением прямого поиска по ней для первого совпадающего символа, и это делается с помощью быстрого встроенного строковогоindex()
метода , Что касается вашего фактического вопроса, приятное небольшое дополнительное удобство, которое приходит с использованием,index()
заключается в том, что он уже вызывает,ValueError
когда символьная подстрока не найдена, поэтому для этого не требуется ничего дополнительного.Вот он вместе с быстрым модульным тестом:
источник
for
цикл. 1-я функция: FAIL дляcontains('foo', 'f')
.for
цикл в ответе, хотя он действительно появляется в их собственном коде. Так или иначе мои 1 - функция показывает им , как , когда символ не найден , который является то , что они просили. и я проиллюстрировал, как это сделать в контексте файла . Даже если они по какой-то причине захотят получить его , я думаю, что другие могут найти вторую версию без нее, по крайней мере, несколько интересной.raise
ValueError
for
for
for
цикл, он делает таким образом ответить на актуальный вопрос о том , как к , когда символ не найден в строке , а именно - по телефону что - то еще , что делает это для вас. Также существует вероятность того, что OP может преодолеть свою фиксацию или что-то еще после того, как увидит безразличное решение или позже станет более знакомым с Python.raise
ValueError
for
for
источник
источник