当我将超时参数添加到函数时,我的代码总是进入异常并打印出“我失败”。当我删除超时参数时,代码按原样运行,并进入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中包含超时的任何想法?
答案 0 :(得分:6)
urllib.request.Request没有初始参数,例如<img sizes="(min-width: 40em) 80vw, 100vw" srcset="/wp-content/uploads/2018/02/hero-bg.png 375w, /wp-content/uploads/2018/02/hero-bg.png 480w, /wp-content/uploads/2018/02/hero-bg.png 768w" alt="" src="/wp-content/uploads/2018/02/hero-bg.png">
,但它位于urllib.request.urlopen,因此您需要:
timeout
答案 1 :(得分:2)
如果查看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'