0

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

4

1 回答 1

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

于 2012-11-30T11:04:25.110 回答