1

現在、Python 2.6/2.7 でのみ動作するライブラリを 3.x で動作するように変更しています。

次のコード セグメントは適切な方法ですか? 具体的には、5 ~ 13 行目と 29 ~ 33 行目について質問しています。

#  Example file
#  Deina
###############################################################################

import sys
ver = sys.version_info[0] 

if ver == 2:
        import Py2lib-1    ## wrong libs for Python 3
        import Py2lib-2
else:
        import Py3lib-1    ## wrong libs for Python 2
        import Py3lib-2


class Part(object):

        def __init__(self, parameters, payload, content_type=None):
                self.content_type = content_type
                self.parameters = parameters
                self.payload = payload
###############################################################################
#  other lines of code go here that work in either version
###############################################################################

        def render(self):
                '''Renders this part -> List of Strings'''

                parameters = ['%s="%s"' % (k, v)
                        if ver == 2:
                                for k, v in self.parameters.iteritems()]  ## Python 2.7
                        else:
                                for k, v in self.parameters.items()]  ## Python 3

###############################################################################
#  other lines of code go here that work in either version
###############################################################################

                return lines
4

1 に答える 1

2

まず、はい、それは確かに可能であり、多くの場合賢明です (開発者とユーザーの両方にとっても便利です)。それは通常、2 と 3 の間で変更された標準ライブラリと構文のその部分にどれだけ依存しているかによって異なります。私は 2 と 3 の両方で実行する独自のプロジェクトを持っており、非常に満足しています。

あなたのコードに関しては、モジュールの最初のどこかに「互換性関数」を作成するか、条件付きインポートの代わりに独自のモジュールでさえ作成します (モジュール全体は実際には必要ありませんよね?) コード全体のバージョンチェック、維持するのが難しいもの。

Armin Ronacher によるこのようなプロジェクトのアーキテクチャに関する非常に優れたブログ投稿があり、発生している多くの問題に対処しています。

于 2013-09-20T05:51:10.830 に答える