当前位置: 首页 > 面试题库 >

尝试/使用Python请求模块的正确方法?

酆奇文
2023-03-14
问题内容
try:
    r = requests.get(url, params={'s': thing})
except requests.ConnectionError, e:
    print e #should I also sys.exit(1) after this?

它是否正确?有没有更好的方法来构造它?这会覆盖我所有的基地吗?


问题答案:

看一下Requests 异常文档。简而言之:

如果出现网络问题(例如DNS故障,连接被拒绝等),请求将引发ConnectionError异常。

如果发生罕见的无效HTTP响应,则请求将引发HTTPError异常。

如果请求超时,Timeout则会引发异常。

如果请求超过配置的最大重定向数,TooManyRedirects则会引发异常。

请求显式引发的所有异常都继承requests.exceptions.RequestException

要回答你的问题,你显示的内容不会涵盖所有基础。你将只捕获与连接有关的错误,而不是超时的错误。

捕获异常时该做什么实际上取决于脚本/程序的设计。退出是否可以接受?你可以继续重试吗?如果错误是灾难性的,并且你无法继续操作,那么可以的是,有个调用sys.exit()

你可以捕获基类异常,该异常将处理所有情况:

try:
    r = requests.get(url, params={'s': thing})
except requests.exceptions.RequestException as e:  # This is the correct syntax
    print e
    sys.exit(1)

或者,你可以分别捕获它们并执行不同的操作。

try:
    r = requests.get(url, params={'s': thing})
except requests.exceptions.Timeout:
    # Maybe set up for a retry, or continue in a retry loop
except requests.exceptions.TooManyRedirects:
    # Tell the user their URL was bad and try a different one
except requests.exceptions.RequestException as e:
    # catastrophic error. bail.
    print e
    sys.exit(1)

正如克里斯蒂安指出:

如果你希望http错误(例如401未经授权)引发异常,可以致电Response.raise_for_status。HTTPError如果响应是http错误,则将引发。

一个例子:

try:
    r = requests.get('http://www.google.com/nothere')
    r.raise_for_status()
except requests.exceptions.HTTPError as err:
    print err
    sys.exit(1)

将打印:

404 Client Error: Not Found for url: http://www.google.com/nothere


 类似资料:
  • 这是正确的吗?有没有更好的方法来构建这个?这能覆盖我所有的基础吗?

  • 本文向大家介绍python 使用 requests 模块发送http请求 的方法,包括了python 使用 requests 模块发送http请求 的方法的使用技巧和注意事项,需要的朋友参考一下 Requests具有完备的中英文文档, 能完全满足当前网络的需求, 它使用了urllib3, 拥有其所有的特性! 最近在学python自动化,怎样用python发起一个http请求呢? 通过了解 requ

  • 问题内容: 我正在尝试使用Python和请求库登录网站以进行某些抓取,但我正在尝试以下操作(无效): 但是,nada,重定向到登录页面。我需要打开一个会话吗?我执行了错误的POST请求,是否需要加载cookie?还是会话会自动执行?我在这里迷路了,需要一些帮助和解释。 我要登录的网站是php,我是否需要“捕获set- cookie并设置cookie标头”?如果是这样,我不知道该怎么做。该网页是具有

  • 我需要发送数千个帖子请求。我在网上搜索信息,经过多次尝试,我编写了以下解决方案: pushes是一个字典列表。 我将应用程序移植到另一个框架中。问题消失了。 发送请求的源服务器上的代码没有被修改。

  • 问题内容: 我正在Heroku上编写一个node.js应用程序,并使用pg模块。我无法弄清楚为查询数据库所需的每个请求获取客户端对象的“正确”方法。 该文档使用如下代码: 但是,您肯定不需要在使用数据库的每个函数中调用对吗?我看过其他执行此操作的代码: 我倾向于第二种选择,因为我相信Heroku的免费数据库实例无论如何都仅限于一个连接,但是以这种方式进行操作是否有任何弊端?每次使用之前,是否需要检

  • 问题内容: 我正在使用python的request模块进行HTTP通信,并且想知道如何重用已经建立的TCP连接?请求模块是无状态的,如果我反复调用get以获得相同的URL,难道每次都不会创建一个新的连接吗? 谢谢!! 问题答案: 请求模块是无状态的,如果我反复调用get以获得相同的URL,它是否每次都会创建一个新的连接? 该模块是不是无状态的; 它只是让您忽略状态,并且可以选择使用全局单例状态。*