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)
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)
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)
nota 3
- Cuando el url1 prueba, respuesta rápida Baidu, que generalmente se ejecuta el programa sin problemas.
url1 = 'https://www.baidu.com/'
- 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
Método 2: Resultados de ejecución
- 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
Método 2: Resultados de ejecución
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.