try:
<실행할 문장1>
<실행할 문장2>
<실행할 문장3>
...
except [발생오류[as 오류 메세지 변수]]:
<오류를 무시하고 실행할 문장1>
<오류를 무시하고 실행할 문장2>
<오류를 무시하고 실행할 문장3>
...
위의 구조를 살펴보면, 먼저 try 이하에서 특정 코드(들)를 실행합니다.
그리고 우리가 except에서 걸어준 발생오류가 발생하면 프로그램을 정지시키지 않고 except 이하의 코드를 실행합니다.
여기서 except 문 오른쪽에 대괄호( [, ] )로 묶인 이유는 생략이 가능하기 때문입니다.
즉, 특정한 오류에 대해 그 오류명을 지정하여 그에 대해서만 예외처리가 가능하며 어찌되었든 오류가 발생했을때의 상황에 대한 예외처리도 가능합니다.
또한 as를 사용함으로써 오류메세지의 내용까지 확인할 수 있습니다.
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-53-4f9d35a615b3> in <module>
15 # infolist.append(i)
16 infoPrint =[] # 데이터를 저장할 리스트 생성
---> 17 for a in infoTable.find_all("tr"):
18 infolist = []
19 infolist.append(j)
AttributeError: 'NoneType' object has no attribute 'find_all'
해당 요소가 없기 때문에 나는 문제입니다.
1.http요청에 대한응답 결과가 없거나
2.내용이 잘못되었거나
3.요청이 잘못된 경우
위 3가지 경우에 발생할 수 있는 문제입니다.
Soultion(예외처리 방법)
try:
~~
except AttributeError as e:
pass
(예외처리방법은 여러가지만, 그중 try except로 사용하였다)
* 대표적인 에러
except (IndexError, TypeError, AttributeError):
pass
1. 페이지가 아예 존재하지 않는 경우
2. 페이지는 있지만 값이 없는 경우
3. 일반 성분 테이블은 있으나 값이 없는 경우
4. 일반 성분 테이블이 존재하지 않으며 다른 테이블이 존재하는 경우
1,2 번의 경우 try - except로 페이지 값이 존재하지 않으면 pass로 빠져나오게 해주었다.
3번 또한 예외처리 해주면된다.
문제는 4번인데 홈페이지내에 테이블의 이름이 모두 똑같고 특이사항을 걸어주지 않았기 때문에 3번째의 테이블을(일반적인 경우 모두 두번째다) 일반 성분으로 생각하고 크롤링 해왔다.
'Computer' 카테고리의 다른 글
네이티브앱으로 할 것인가? 하이브리드로 할 것인가? (0) | 2020.04.25 |
---|---|
데이터 폭증 시대에 발맞추는 저장장치 기술 (0) | 2020.04.10 |
VSCode Update: February 2020 (version 1.43) (0) | 2020.03.20 |
Visualisation & Visualization- 차이점??? (0) | 2020.03.15 |
Visualize vs Visualise - What's the difference? (0) | 2020.03.14 |