ValueError를 발생시키는 방법?
문자열에서 특정 문자의 가장 큰 인덱스를 찾는이 코드가 있지만 ValueError
지정된 문자가 문자열에서 발생하지 않을 때 a를 발생시키고 싶습니다 .
그래서 다음과 같이 :
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))
다음은 여전히 작동하는 수정 된 버전의 코드이며 ValueError
원하는 방식 으로 올리는 방법을 보여줍니다 . 별로 - 방법, 생각 find_last()
, find_last_index()
또는 뭔가 simlar이 기능에 대한 더 자세한 설명 이름이됩니다. 혼동 가능성을 더하는 것은 Python이 이미 __contains__()
멤버십 테스트 측면에서 약간 다른 작업을 수행 하는 컨테이너 객체 메서드를 가지고 있다는 사실입니다 .
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 {!r} in {!r}'.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'
업데이트 — 훨씬 더 간단한 방법
와! 여기에 훨씬 더 간결한 버전 (본질적으로 한 줄짜리)이 있습니다. [::-1]
이는 첫 번째 일치하는 문자에 대해 순방향 검색을 수행하기 전에 문자열을 역순으로 (통해 ) 검색 하고 빠른 내장 문자열 index()
방법을 사용하기 때문에 더 빠릅니다. . 실제 질문과 관련하여 사용할 때 제공되는 약간의 보너스 편의 는 문자 하위 문자열을 찾을 수 없을 때 index()
이미 a를 ValueError
발생 시키므로 추가가 필요하지 않다는 것입니다.
여기에 빠른 단위 테스트가 있습니다.
def contains(char_string, char):
# Ending - 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
>>> def contains(string, char):
... for i in xrange(len(string) - 1, -1, -1):
... if string[i] == char:
... return i
... raise ValueError("could not find %r in %r" % (char, string))
...
>>> contains('bababa', 'k')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 5, in contains
ValueError: could not find 'k' in 'bababa'
>>> contains('bababa', 'a')
5
>>> contains('bababa', 'b')
4
>>> contains('xbababa', 'x')
0
>>>
최신 버전의 파이썬에서는이를 위해 fstrings를 사용할 수 있습니다.
하자 value = "Hello"
raise ValidationError(f"{value} is not valid category")
>>> response='bababa'
... if "K" in response.text:
... raise ValueError("Not found")
참고 URL : https://stackoverflow.com/questions/4393268/how-to-raise-a-valueerror
'programing tip' 카테고리의 다른 글
IE9를 쿼크 모드로 전환하는 HTML5 doctype? (0) | 2020.08.19 |
---|---|
DIV를 서로 겹쳐서 쌓으시겠습니까? (0) | 2020.08.19 |
UITableView에 didSelectRowAtIndexPath 또는 prepareForSegue 메소드를 사용 하시겠습니까? (0) | 2020.08.19 |
iOS9에서 "SSL 오류가 발생했으며 서버에 대한 보안 연결을 설정할 수 없습니다"오류가 발생합니다. (0) | 2020.08.19 |
matplotlib : 이미지에 직사각형을 그리는 방법 (0) | 2020.08.19 |