我希望我的代码能够运行python> = 2.5代码使用这样的urllib:
handle = urllib2.urlopen(req, timeout)
这适用于python2.6& python2.7但是python2.5不支持显式超时,所以我们必须为这样的套接字设置默认超时:
import socket
socket.setdefaulttimeout(timeout)
handle = urllib2.urlopen(req)
虽然这适用于更高版本的python(2.6& 2.7),但我想明确地在支持它的地方设置超时。我的问题是如何优雅地做到这一点?我应该进行版本检查吗?
答案 0 :(得分:1)
总是有try
,这对于这类事情来说非常完美:
import socket
import urllib2
try:
handle = urllib2.urlopen(req, timeout = timeout)
except TypeError:
socket.setdefaulttimeout(timeout)
handle = urllib2.urlopen(req)
(确保在第一次调用时使用关键字参数,否则python 2.5会认为你传递了'data'参数。)