2016-08-01 5 views
2

초보자 용 질문에 대해 미리 사과드립니다. 파이썬에서 웹 데이터에 액세스하는 법을 배우는 중이고 requests 패키지에서 예외 처리를 이해하는 데 문제가 있습니다. urllib 패키지를 사용하여 웹 데이터에 액세스 할 때 지금까지요청이있는 잘못된 URL 처리

, 나는이 같은 나쁜 URL을 잡으려고 구조를 제외하고/시도에 urlopen 전화를 포장 :

import urllib, sys 

url = 'https://httpbinTYPO.org/' # Note the typo in my URL 

try: uh=urllib.urlopen(url) 
except: 
    print 'Failed to open url.' 
    sys.exit() 

text = uh.read() 
print text 

이 분명 종류의 원유 방법입니다 나쁜 URL이 아닌 모든 종류의 문제를 숨길 수 있기 때문에 그렇게 할 수 있습니다.

import requests, sys 

url = 'https://httpbinTYPO.org/' # Note the typo in my URL 

r = requests.get(url) 
if r.raise_for_status() is not None: 
    print 'Failed to open url.' 
    sys.exit() 

text = r.text 
print text 

그러나,이 명확하게 (작동하지 않는 오류가 발생합니다 :이처럼 requests 패키지를 사용하면 문서에서

, 나는 종류의 당신이 구조를 제외하고 /를 시도 피할 수 모였다 및 추적). 이 작업을 수행 할 수있는 '올바른'(즉, 간단하고 우아한 Pythonic) 방법은 무엇입니까?

답변

1

시도를 연결 오류를 잡으려고 :

from requests.exceptions import ConnectionError 

try: 
    requests.get('https://httpbinTYPO.org/') 
except ConnectionError: 
    print 'Failed to open url.' 
+0

그게 효과가 있어요. 그래서, 다음 예제 (문서에서)에서 나의 knowor를 보여주기 위해서,'requests.get()'명령이 실행을 멈추지 않는 이유는 무엇입니까 :'bad_r = requests.get ('http://httpbin.org/ 상태/404 ')'. 에러를보기 위해'raise_for_status()'를 사용하는 이유는 무엇입니까? – tcquinn

+0

"오류"에는 여러 유형이 있습니다. 잘못된'URL' (존재하지 않는 웹 애플리케이션의'URL' 또는 잘못된'URL' 구성)을 사용하여 요청하면'ConnectionError','MissingSchema' ...이 오류는 요청을 보낼 수 없다는 것을 의미합니다 . 'HTTP-errors'는 완전히 다른 유형의 에러입니다. 요청이 올바르게 구성되어 전송 될 수 있지만 대상 서버가 원하는 방식으로 처리 할 수없는 경우 'HTTP 오류'(예 : 상태 코드 401, 404, 500 ...)를 얻을 수 있습니다. 이 경우에는'python-request'가 예외를 발생시키지 않으므로'raise_for_status()'를 사용하여 – Andersson

+0

을 얻을 수 있습니다. 알았습니다. 나는 지금 그 구별을 이해한다. 고맙습니다. – tcquinn

1

을 제외한 키워드 뒤에 예외 종류를 지정할 수 있습니다. 그래서 나쁜 연결에서 오는 단지 오류를 잡기 위해, 당신은 할 수 있습니다 :

import urllib, sys 

url = 'https://httpbinTYPO.org/' # Note the typo in my URL 

try: uh=urllib.urlopen(url) 
except IOError: 
    print 'Failed to open url.' 
    sys.exit() 

text = uh.read() 
print text 
+0

감사합니다, 빌. 나는'requests' 패키지를 사용하는 방법을 배우고 싶어하는 다른 이유가 있지만, 이것은 일반적으로 예외 처리에 대한 나의 이해를 돕는다. – tcquinn

+0

죄송합니다. 패키지에 익숙하지 않아서 도와 드릴 수 없습니다. 그러나 다른 누군가가 당신을 도울 수 있기를 바랍니다. – Bill