繁体   English   中英

urllib.request.Request超时参数错误

[英]urllib.request.Request timeout argument error

当我将超时参数添加到函数时,我的代码总是进入异常并打印出“我失败”。 当我删除超时参数时,代码按原样运行,并进入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中包含超时的任何想法?

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.")

如果查看Request函数的文档( https://docs.python.org/3/library/urllib.request.html#urllib.request.Request ),您将看到没有超时参数。 所以你的函数只是抛出,因为你传递了一个无法识别的keyworded参数。 查看发生的情况的一种方法是实际捕获并打印异常,如下所示:

import urllib.request
url = 'stackoverflow.com'

try:
    req = urllib.request.Request("http://" + url,timeout=1000)
    req = urllib.request.urlopen(req)
    print("I tried.")
except Exception as exc:
    print(exc)

打印:

init ()得到一个意外的关键字参数'timeout'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM