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)

(最初の呼び出しでこれにキーワード引数を使用するようにしてください。そうしないと、Python2.5は'data'引数を渡していると見なします。)

于 2012-11-30T11:04:25.110 に答える