使用urllib.error进行请求异常处理

请求异常通常可分为:

  • 网络异常
  • 服务器异常
  • 资源异常
  • ......

urllib.error

python的urllib标准库的error子模块包含了URLErrorHTTPErrorContentTooShortError3类,分别处理当URL无法打开时抛出的异常、当HTTP请求失败时抛出的异常(继承自URLError)和当下载内容比预期短时抛出的异常。详细信息见官网https://docs.python.org/3.12/library/urllib.error.html

try...except...

在python中tryexcept语句是异常处理机制的核心部分,用于处理程序运行时可能发生的错误(异常)。异常处理允许程序在遇到错误时能返回非异常的返回值,而不是崩溃。其中,try块是希望监控错误的代码块,如果发生了异常,python会终止执行try块中的剩余代码。except块用来捕获和处理try块中发生的异常,可以指定捕获的异常类型,如果不指定异常类型则会捕获所有异常。格式为(伪代码):

try:
    尝试执行的代码块
    # 如果代码块中发生异常将跳转到except部分
except error_a as e:
    当try语句块发生error_a异常时执行的代码
    # e是异常实例,可以用来获取错误信息
except error_b as e:
    当try语句块发生error_b异常时执行的代码
    # 可以捕获多个不同类型的异常
else:
    如果try语句块的代码没有发生异常执行时的代码
finally:
    无论是否发生异常都会执行的代码
    # 常用于清理资源,如关闭文件或网络连接

以状态码为404的的请求异常(服务器找不到资源,url无法打开)为例:

from urllib.request import Request, urlopen
from fake_useragent import UserAgent
from urllib.error import URLError
# 错误的请求地址
url = 'https://www.bazhuayu.com/helpc'
# 封装请求头
headers = {'user-agent': UserAgent().chrome}
# 创建Request对象
req = Request(url, headers=headers)
# 异常处理 HTTPError是URLError的子类,所以URLError的except块也能捕获HTTPError异常
try:
    resp = urlopen(req)
except URLError as e:
    print(e)
    print(type(e))
else:
    print(resp.read().decode())

运行结果

HTTP Error 404: Not Found
<class 'urllib.error.HTTPError'>

调试功能

pychram和vscode都提供了强大的调试工具,帮助开发者在编写和测试代码时更容易发现和修复错误。不仅可以查看变量的值,还可以查看变量的属性和方法,可以深入了解对象的状态和行为。例如URLError的实例e为HTTPError类,包含args、characters_written、code、errno等属性,在变量面板能查看对象e有哪些属性以及属性的值,也可以在except块中添加代码例如添加print(e.code)查看返回的HTTP状态码。

vscode简单调试

pycharm简单调试

posted @ 2024-09-18 23:11  松鼠q  阅读(12)  评论(0编辑  收藏  举报