질문 : Python 요청 모듈 사용을 시도 / 제외하는 올바른 방법은 무엇입니까?
try:
r = requests.get(url, params={'s': thing})
except requests.ConnectionError, e:
print e #should I also sys.exit(1) after this?
이 올바른지? 이것을 구조화하는 더 좋은 방법이 있습니까? 이것이 내 모든 기지를 다룰까요?
답변
요청 예외 문서를 살펴보십시오. 요컨대 :
네트워크 문제 (예 : DNS 실패, 연결 거부 등)가 발생하는 경우 요청은 ConnectionError
예외를 발생시킵니다.
드물게 잘못된 HTTP 응답이 발생하는 경우 요청은 HTTPError
예외를 발생시킵니다.
요청 시간이 초과되면 Timeout
예외가 발생합니다.
요청이 구성된 최대 리디렉션 수를 초과하면 TooManyRedirects
예외가 발생합니다.
모든 예외 요청은 명시 적으로 상속을 제기 requests.exceptions.RequestException
.
귀하의 질문에 답하기 위해 귀하가 보여주는 것이 귀하의 모든 기지를 포함 하지는 않습니다. 시간 초과가 아닌 연결 관련 오류 만 포착합니다.
예외를 잡았을 때해야 할 일은 실제로 스크립트 / 프로그램의 디자인에 달려 있습니다. 나가도 괜찮습니까? 계속해서 다시 시도 할 수 있습니까? 오류가 치명적이고 계속 진행할 수없는 경우, 예, SystemExit 를 발생시켜 프로그램을 중단 할 수 있습니다 (오류를 인쇄하고 sys.exit
호출하는 좋은 방법).
모든 경우를 처리하는 기본 클래스 예외를 포착 할 수 있습니다.
try:
r = requests.get(url, params={'s': thing})
except requests.exceptions.RequestException as e: # This is the correct syntax
raise SystemExit(e)
또는 별도로 잡아서 다른 일을 할 수 있습니다.
try:
r = requests.get(url, params={'s': thing})
except requests.exceptions.Timeout:
# Maybe set up for a retry, or continue in a retry loop
except requests.exceptions.TooManyRedirects:
# Tell the user their URL was bad and try a different one
except requests.exceptions.RequestException as e:
# catastrophic error. bail.
raise SystemExit(e)
Christian 은 다음과 같이 지적했습니다.
http 오류 (예 : 401 Unauthorized)에서 예외를 발생 시키려면 Response.raise_for_status
를 호출 할 수 있습니다. 응답이 http 오류 인 경우 HTTPError
예 :
try:
r = requests.get('http://www.google.com/nothere')
r.raise_for_status()
except requests.exceptions.HTTPError as err:
raise SystemExit(err)
다음을 인쇄합니다.
404 Client Error: Not Found for url: http://www.google.com/nothere
출처 : https://stackoverflow.com/questions/16511337/correct-way-to-try-except-using-python-requests-module
'프로그래밍 언어 > Python' 카테고리의 다른 글
디버그 정보와 함께 Python 오류를 기록하는 방법 (0) | 2021.12.11 |
---|---|
Python에서 여러 줄 주석을 만드는 방법 (0) | 2021.12.11 |
Python이 해석되는 경우 .pyc 파일의 쓰임새 (0) | 2021.12.10 |
파이썬에서 문자열을 bool 타입으로 변환 (0) | 2021.12.10 |
Python 모듈과 패키지의 차이점 (0) | 2021.12.10 |