проверить, возвращает ли ValueError - PullRequest
0 голосов
/ 21 июня 2019

Я хочу получить индекс символа внутри строки Python.Но когда строка не найдена, функция возвращает ValueError: substring not found

Так как у меня есть функция в операторе if, это нарушает мой код.

Как я могу проверить, если вывод следующихстрока кода не дает вывод ValueError: mystring.index('string I look for')

Ответы [ 3 ]

1 голос
/ 21 июня 2019

Вы можете сначала проверить это, создав простую функцию

def check(s, target):
    if target in s:
           return s.index(target)
    else:
           return None

s = 'Yeah, I\'m gonna take my horse to the old town road'

check(s, 'g')
# 10

Или с лямбда-функцией, если вы собираетесь использовать ее один или два раза

check = lambda s, t: s.index(t) if t in s else None
s = 'Yeah, I\'m gonna take my horse to the old town road'

check(s, 'old')
# 37

s[37]
# 'o'
0 голосов
/ 21 июня 2019

См. 8.3. Обработка исключений здесь

TRY / EXCEPT должны сделать свое дело. Например:

try:
    mystring.index('c')
except:
    print('substring not found')

это вернет индекс символа 'c', если он существует в строке, если нет, он выполнит заданное вами действие .. в этом случае он напечатает «подстрока не найдена» и продолжит код, не нарушая его

Это будет работать с любой ошибкой. Если вы хотите быть более конкретным и выполнять разные действия для разных типов ошибок, вы также можете указать действия по типам ошибок ... например,

except ValueError:
    <do something>
0 голосов
/ 21 июня 2019

Вы можете получить исключение с помощью try except:

In [1]: s = "hello world"

In [1]: s = "hello world"

In [2]: s.index("a")
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-2-1a10a9a0bcff> in <module>
----> 1 s.index("a")

ValueError: substring not found

In [3]: try:
   ...:     s.index("a")
   ...: except ValueError:
   ...:     pass  # or do something else. This means that the character was not found
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...