Python urllib.request.urlopen超时,不带internet

Python urllib.request.urlopen超时,不带internet,python,python-3.x,request,urllib,urlopen,Python,Python 3.x,Request,Urllib,Urlopen,urllib.request.urlopen有一个timeout选项。然而,当我的互联网关闭时,这个选项似乎不起作用 import urllib urllib.request.urlopen(url, timeout=1) 悬而未决,最终放弃 URLError: <urlopen error [Errno -3] Temporary failure in name resolution> URLError: 当我的互联网断开时,我怎么能强制超时?这可不是小事。您有一个DNS超时

urllib.request.urlopen
有一个
timeout
选项。然而,当我的互联网关闭时,这个选项似乎不起作用

import urllib
urllib.request.urlopen(url, timeout=1)
悬而未决,最终放弃

URLError: <urlopen error [Errno -3] Temporary failure in name resolution>
URLError:

当我的互联网断开时,我怎么能强制超时?

这可不是小事。您有一个DNS超时,因为您的系统无法确定如何处理给定的URL。然而,正如David Murray在这里指出的,这是python无法控制的:

您可能希望使用此自定义超时实现:

您可以阅读此内容。它很好地解释了当前的
timeout
是一个非常模糊的概念。即使在声称“为人类”的
请求中,
timeout
也不是真正为人类

在您的情况下,名称解析是http连接之前的一个预处理过程,但
timeout
仅适用于http和ftp连接


要获得一致的
超时行为
,我想最好的方法是使用线程。您也可以使用
signal.alarm
,但它只适用于UNIX系统。

谢谢您提供的链接。似乎没有一个好的解决办法。