首页 > 解决方案 > urllib.request.Request 超时参数错误

问题描述

当我向函数添加超时参数时,我的代码总是进入异常并打印出“我失败了”。当我删除 timeout 参数时,代码会正常工作,并进入 try 子句。有关超时参数如何在 urllib.request 函数中工作的任何信息?

import urllib.request
url = 'stackoverflow.com'

try:
    req = urllib.request.Request("http://" + url, timeout = 1000000000)
    req = urllib.request.urlopen(req)
    print("I tried.")
except:
    print("I failed.")

我尝试使用请求而不是 urllib,并且代码与包含的超时参数一起使用。在下面的代码中,它总是进入 try 子句,有或没有传递超时参数。

import requests
url = 'stackoverflow.com'

try:
    req = requests.get("http://" + url, timeout=1000000)
    print("I tried.")
except:
    print("I failed.")

但是,我不想使用请求,因为以后我的代码中有一些冲突。关于如何在 urllib 中包含超时的任何想法?

标签: pythonpython-requestsurllib

解决方案


urllib.request.Request中没有初始参数,timeout但它在urllib.request.urlopen中,所以你需要:

import urllib.request
url = 'stackoverflow.com'

try:
    req = urllib.request.Request("http://" + url)
    req = urllib.request.urlopen(req, timeout=1000000000)
    #                                 ^^^^^^^
    print("I tried.")
except:
    print("I failed.")

推荐阅读