如何为urllib2支持多个版本的python?

时间:2012-11-17 19:32:58

标签: python-2.7 urllib2 python-2.5

我希望我的代码能够运行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),但我想明确地在支持它的地方设置超时。我的问题是如何优雅地做到这一点?我应该进行版本检查吗?

1 个答案:

答案 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'参数。)