Python: Captura urllib.request excepción de tiempo de espera de dos métodos

Python: Captura urllib.request excepción de tiempo de espera de dos métodos


1. Antecedentes

  Al utilizar urllib.request.urlopen, frecuentes excepción de tiempo de espera hace que el programa deje de funcionar. Cada parada también se reinicie el programa, que no es propicio para la robustez del programa. Ahora queremos captura urllib de un procesamiento de excepciones de tiempo de espera de hacer horas extras.

from urllib import request

headers = {  # 用户代理,伪装浏览器用户访问网址
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3941.4 Safari/537.36'
}


# 测试url是否有效
def test_url(url):
    r = request.Request(url, headers=headers)
    r1 = request.urlopen(r, timeout=0.1)
    print(r1.status)


if __name__ == '__main__':
    url1 = 'https://www.baidu.com/'
    url2 = 'http://httpbin.org/get'
    url3 = 'https://www.jianshu.com/p/5d6f1891354f'
    test_url(url2)

error de tiempo de espera 1

excepción de tiempo de espera 2

2. Métodos

2.1 salvo excepciones como el correo

from urllib import request

headers = {  # 用户代理,伪装浏览器用户访问网址
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3941.4 Safari/537.36'
}


# 测试url是否有效
def test_url(url):
    try:
        r = request.Request(url, headers=headers)
        r1 = request.urlopen(r, timeout=0.1)
        print(r1.status)
    except Exception as e:  # 捕获除与程序退出sys.exit()相关之外的所有异常
        print(e)


if __name__ == '__main__':
    url1 = 'https://www.baidu.com/'
    url2 = 'http://httpbin.org/get'
    url3 = 'https://www.jianshu.com/p/5d6f1891354f'
    test_url(url2)

Los resultados operativos

2.2 excepto error.URLError como e

from urllib import request, error
import socket

headers = {  # 用户代理,伪装浏览器用户访问网址
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3941.4 Safari/537.36'
}


# 测试url是否有效
def test_url(url):
    try:
        r = request.Request(url, headers=headers)
        r1 = request.urlopen(r, timeout=0.1)
        print(r1.status)
    except error.HTTPError as e:
        print(str(e.code) + ':' + e.reason)
    except error.URLError as e:
        print(e.reason)
        if isinstance(e.reason, socket.timeout):
            print('时间超时')


if __name__ == '__main__':
    url1 = 'https://www.baidu.com/'
    url2 = 'http://httpbin.org/get'
    url3 = 'https://www.jianshu.com/p/5d6f1891354f'
    test_url(url2)

Los resultados operativos

nota 3

  1. Cuando el url1 prueba, respuesta rápida Baidu, que generalmente se ejecuta el programa sin problemas.
url1 = 'https://www.baidu.com/'

Los resultados operativos

  1. Cuando los url2 de prueba, el programa puede realmente capturar una excepción de tiempo de espera.
url2 = 'http://httpbin.org/get'

  Método 1: Resultados de ejecución
Resultados Método 1 Run
  Método 2: Resultados de ejecución
Resultados Método 2 Run

  1. Cuando el url3 prueba, 1 puede detectar una excepción de tiempo de espera, el método 2 de salida de error. La razón puede estar en mal estado de la red, causada por la aplicación excesiva de contenido web.
url3 = 'https://www.jianshu.com/p/5d6f1891354f'

  Método 1: Resultados de ejecución
Resultados Método 1 Run
  Método 2: Resultados de ejecución
Resultados Método 2 Run

4 Resumen

  "Excepto error.URLError como e" sólo puede capturar un tiempo de espera asociado con urllib excepción "salvo excepciones como e" puede capturar toda una excepción de tiempo de espera.

Publicado 77 artículos originales · ganado elogios 25 · Vistas a 10000 +

Supongo que te gusta

Origin blog.csdn.net/qq_34801642/article/details/103887853
Recomendado
Clasificación