BeautifulSoup을 사용 하고 일부 HTML을 구문 분석하고 있습니다.
각 HTML에서 특정 데이터 (for 루프 사용)를 얻고 해당 데이터를 특정 목록에 추가합니다.
문제는 일부 HTML의 형식이 다르며 내가 원하는 데이터가 없다는 것 입니다.
그래서 저는 예외 처리를 사용하고 null
목록 에 값 을 추가하려고했습니다 (데이터 시퀀스가 중요하므로이 작업을 수행해야합니다).
예를 들어 다음과 같은 코드가 있습니다.
soup = BeautifulSoup(links)
dlist = soup.findAll('dd', 'title')
# I'm trying to find content between <dd class='title'> and </dd>
gotdata = dlist[1]
# and what i want is the 2nd content of those
newlist.append(gotdata)
# and I add that to a newlist
링크 중 일부에는.이 없으므로 대신 목록 <dd class='title'>
에 문자열 null
을 추가하고 싶습니다 .
오류가 나타납니다.
list index out of range.
내가 시도한 것은 다음과 같은 줄을 추가하는 것입니다.
if not dlist[1]:
newlist.append('null')
continue
그러나 그것은 작동하지 않습니다. 여전히 오류가 표시됩니다.
list index out of range.
이것에 대해 어떻게해야합니까? 예외 처리를 사용해야합니까? 아니면 더 쉬운 방법이 있습니까?
어떤 제안? 어떤 도움이라도 정말 좋을 것입니다!
답변
예외를 처리하는 것이 방법입니다.
try:
gotdata = dlist[1]
except IndexError:
gotdata = 'null'
물론 당신은 또한 확인할 수 len()
의를 dlist
; 그러나 예외를 처리하는 것이 더 직관적입니다.
답변
두 가지 옵션이 있습니다. 예외를 처리하거나 길이를 테스트하십시오.
if len(dlist) > 1:
newlist.append(dlist[1])
continue
또는
try:
newlist.append(dlist[1])
except IndexError:
pass
continue
이 경우 첫 번째 사용 종종 더 번째 항목,이 경우 두 번째입니다 때로는 더 두 번째 항목입니다.
답변
삼항이면 충분합니다. 변화:
gotdata = dlist[1]
에
gotdata = dlist[1] if len(dlist) > 1 else 'null'
이것은 표현의 짧은 방법입니다
if len(dlist) > 1:
gotdata = dlist[1]
else:
gotdata = 'null'
답변
ThiefMaster ♦를 참조하면 때때로 값이 ‘\ n’또는 null로 지정된 오류가 발생하고 ValueError를 처리하는 데 필요한 작업을 수행합니다.
예외를 처리하는 것이 방법입니다.
try:
gotdata = dlist[1]
except (IndexError, ValueError):
gotdata = 'null'
답변
for i in range (1, len(list))
try:
print (list[i])
except ValueError:
print("Error Value.")
except indexError:
print("Erorr index")
except :
print('error ')
답변
더 짧은 방법에 관심이있는 사람 :
gotdata = len(dlist)>1 and dlist[1] or 'null'
그러나 최상의 성능을 위해 False
대신을 사용 하는 것이 좋습니다 'null'
. 그러면 한 줄 테스트로 충분합니다.
gotdata = len(dlist)>1 and dlist[1]