Python 의 URLError 이상 을 처리 하 는 방법

1.URLError
우선 URLError 가 발생 할 수 있 는 원인 을 설명 합 니 다.
  •     네트워크 에 연결 이 없 으 면 이 컴퓨터 는 인터넷 에 접속 할 수 없습니다
  •     특정 서버 에 연결 되 지 않 음
  •     서버 가 존재 하지 않 습 니 다
  • 코드 에서, 우 리 는 try - exception 문장 으로 상응하는 이상 을 포위 하고 포획 해 야 한다.다음은 하나의 예 로, 먼저 그것 의 경망 함 을 느껴 보 자. 
    
    import urllib2
     
    requset = urllib2.Request('http://www.xxxxx.com')
    try:
      urllib2.urlopen(requset)
    except urllib2.URLError, e:
      print e.reason
    

    우 리 는 urlopen 방법 을 이용 하여 존재 하지 않 는 사이트 주 소 를 방 문 했 습 니 다. 실행 결 과 는 다음 과 같 습 니 다. 
    
    [Errno 11004] getaddrinfo failed
    

    오류 코드 가 11004 라 는 것 을 설명 합 니 다. 오류 원인 은 getaddrinfo failed 입 니 다.
    2.HTTPError
    HTTP Error 는 URLError 의 하위 클래스 입 니 다. urlopen 방법 으로 요청 을 할 때 서버 에 응답 대상 response 에 대응 합 니 다. 그 중에서 숫자 '상태 코드' 를 포함 합 니 다.예 를 들 어 response 가 '방향 바 꾸 기' 라면 다른 주소 로 문 서 를 가 져 와 야 합 니 다. urllib 2 는 이 를 처리 합 니 다.
    다른 처리 할 수 없 는 urlopen 은 HTTP 오류 가 발생 합 니 다. 해당 상태 에 대응 합 니까? HTTP 상태 코드 는 HTTP 프로 토 콜 이 되 돌아 오 는 응답 상 태 를 표시 합 니 다.다음은 상태 코드 를 다음 과 같이 요약 합 니 다.
  •     100: 계속 클 라 이언 트 는 계속 요청 을 보 내야 합 니 다.클 라 이언 트 는 요청 의 나머지 부분 을 계속 보 내 거나 요청 이 완료 되면 이 응답 을 무시 해 야 합 니 다.
  •     101: 변환 프로 토 콜 은 이 응답 마지막 빈 줄 을 보 낸 후에 서버 는 Upgrade 메시지 헤더 에서 정의 하 는 프로 토 콜 로 전 환 됩 니 다.새로운 협 의 를 전환 하 는 것 이 더 좋 을 때 만 비슷 한 조 치 를 취해 야 한다.
  •     102: WebDAV (RFC 2518) 로 확 장 된 상태 코드 를 계속 처리 합 니 다. 대표 처 리 는 계속 실 행 됩 니 다.
  •     200: 성공 요청 처리 방식: 응답 을 받 은 내용, 처리
  •     201: 요청 이 완료 되 었 습 니 다. 결 과 는 새 자원 을 만 들 었 습 니 다.자원 을 새로 만 든 URI 는 응답 하 는 개체 에서 처리 할 수 있 습 니 다: 파충류 에 서 는 만 나 지 않 습 니 다
  •     202: 요청 이 수락 되 었 으 나 처리 가 완료 되 지 않 았 습 니 다. 처리 방식: 차단 대기
  •     204: 서버 측 에서 요청 을 실 현 했 지만 새로운 정 보 를 되 돌려 주지 않 았 습 니 다.고객 이 사용자 에이전트 라면 문서 보 기 를 업데이트 할 필요 가 없습니다.처리 방법: 버 림
  •     300: 이 상태 코드 는 HTTP / 1.0 프로그램 에서 직접 사용 되 지 않 고 3XX 형식 으로 응답 하 는 기본 설명 입 니 다.요청 한 자원 이 여러 개 있 습 니 다.처리 방식: 프로그램 에서 처리 할 수 있 으 면 추가 처 리 를 하고 프로그램 에서 처리 할 수 없 으 면 버 립 니 다
  •     301: 요청 한 자원 은 영구적 인 URL 을 할당 합 니 다. 그러면 나중에 이 URL 을 통 해 이 자원 처리 방식 을 물 어 볼 수 있 습 니 다. 분 배 된 URL
  • 로 재 설정 할 수 있 습 니 다.
  •     302: 요청 한 자원 을 다른 URL 에 임시 저장 처리 방식: 임시 URL 로 변경
  •     304: 요청 한 자원 업데이트 되 지 않 은 처리 방식: 버 림
  •     400: 불법 요청 처리 방식: 폐기
  •     401: 권한 이 부여 되 지 않 은 처리 방식: 버 림
  •     403: 처리 금지 방식: 버 림
  •     404: 처리 방법 을 찾 을 수 없 음: 버 림
  •     500: 서버 내부 오류 서버 가 예상 치 못 한 상황 에 부 딪 혀 요청 처 리 를 완료 할 수 없습니다.일반적으로 이 문 제 는 서버 측의 소스 코드 에 오류 가 발생 할 때 발생 한다.
  •     501: 서버 가 현재 요청 에 필요 한 기능 을 지원 하지 않 는 서버 를 식별 할 수 없습니다.서버 가 요청 한 방법 을 식별 할 수 없고 자원 에 대한 요청 을 지원 할 수 없습니다.
  •     502: 오류 게 이 트 웨 이 가 게 이 트 웨 이 나 프 록 시 로 서 요청 을 시도 할 때 상류 서버 에서 잘못된 응답 을 받 습 니 다.
  •     503: 서비스 오류 가 발생 했 습 니 다. 임시 서버 유지보수 나 과부하 로 서버 에서 요청 을 처리 할 수 없습니다.이 상황 은 임시 적 이 며 일정 시간 후에 회 복 될 것 이다.

  • HTTPError 인 스 턴 스 가 발생 하면 code 속성 이 있 습 니 다. 이것 이 바로 서버 에서 보 낸 오류 번호 입 니 다.urllib 2 는 방향 을 바 꿀 수 있 습 니 다. 즉, 3 으로 시작 하 는 번 호 는 처리 할 수 있 고 100 - 299 범위 의 번 호 는 성공 적 으로 표시 되 기 때문에 400 - 599 의 오류 번호 만 볼 수 있 습 니 다.
    다음은 예 를 들 어 캡 처 한 이상 은 HTTPError 입 니 다. code 속성 을 가지 고 있 습 니 다. 바로 오류 코드 입 니 다. 또한 reason 속성 을 인쇄 했 습 니 다. 이것 은 부모 클래스 URLError 의 속성 입 니 다. 
    
    import urllib2
     
    req = urllib2.Request('http://blog.csdn.net/cqcre')
    try:
      urllib2.urlopen(req)
    except urllib2.HTTPError, e:
      print e.code
      print e.reason
    

    실행 결 과 는 다음 과 같다. 
    
    403
    Forbidden
    

    오류 코드 는 403 입 니 다. 오류 원인 은 Forbidden 입 니 다. 서버 접근 이 금지 되 어 있 음 을 설명 합 니 다.
    HTTPError 의 부모 클래스 는 URLError 라 는 것 을 알 고 있 습 니 다. 프로 그래 밍 경험 에 따 르 면 부모 클래스 의 이상 은 하위 클래스 이상 뒤에 써 야 합 니 다. 하위 클래스 가 캡 처 되 지 않 으 면 부모 클래스 의 이상 을 캡 처 할 수 있 기 때문에 상기 코드 는 이렇게 고 칠 수 있 습 니 다. 
    
    import urllib2
     
    req = urllib2.Request('http://blog.csdn.net/cqcre')
    try:
      urllib2.urlopen(req)
    except urllib2.HTTPError, e:
      print e.code
    except urllib2.URLError, e:
      print e.reason
    else:
      print "OK"
    

    HTTPError 가 포착 되면 출력 code 는 URLError 이상 을 처리 하지 않 습 니 다.HTTP 오류 가 발생 하지 않 으 면 URLError 이상, 출력 오류 원인 을 캡 처 합 니 다.
    또한 hasattr 속성 을 추가 하여 속성 을 미리 판단 할 수 있 습 니 다. 코드 는 다음 과 같 습 니 다. 
    
    import urllib2
     
    req = urllib2.Request('http://blog.csdn.net/cqcre')
    try:
      urllib2.urlopen(req)
    except urllib2.URLError, e:
      if hasattr(e,"code"):
        print e.code
      if hasattr(e,"reason"):
        print e.reason
    else:
      print "OK"
    

    우선 이상 한 속성 을 판단 하여 속성 출력 오류 가 발생 하지 않도록 한다.
    이상 은 URLError 와 HTTPError 에 대한 소개 와 그 에 따 른 오류 처리 방법 입 니 다. 여러분 화 이 팅!

    좋은 웹페이지 즐겨찾기