2

さまざまなPythonバージョンでunittestライブラリの最新機能を使用できるようにするための2つの方法を考えることができます。

try:
    from unittest2 import TestCase
except ImportError:
    from unittest import TestCase

また

import sys
if sys.verson_info.major>=2 and sys.version_info.minor>=7:
    from unittest import TestCase
else:
    from unittest2 import TestCase

これらのどれがよりPythonicですか?

4

3 に答える 3

2

私はtryステートメントを使用します。これはよく使われるイディオムです。また、syspython3.3のバージョンが間違っています。

>>> if sys.version_info.major>=2 and sys.version_info.minor>=7:
...     from unittest import TestCase
... else:
...     from unittest2 import TestCase
... 
Traceback (most recent call last):
  File "<stdin>", line 4, in <module>
ImportError: No module named 'unittest2'

あるべきですが:

>>> import sys
>>> major, minor = sys.version_info.major, sys.version_info.minor
>>> if (major >= 2 and minor >= 7) or (major >= 3 and minor >= 2):
...     from unittest import TestCase
... else:
...     from unittest2 import TestCase
... 
>>> 

これは、tryバージョンがPythonのバージョン全体でより堅牢であることも示しています。

tryCで記述されたモジュールの「高速化された」バージョンがある場合、ファイルの最後に次のように配置すると、バリアントをよく使用します。

try:
    from _accelerated import *
except ImportError:
    pass

Pythonの実装を加速されたもので上書きします。

于 2012-11-12T13:50:17.573 に答える
1

2番目のバージョンでは別のモジュール()をインポートする必要があるという事実が気に入らないsysので、最初のバージョンを優先します。

try:
    from unittest2 import TestCase
except ImportError:
    from unittest import TestCase

編集:

上記のバージョンに満足していないことが判明しpyflakesflake8「行からの未使用の「インポート」の再定義...」エラーまたは「W402「テストケース」がインポートされましたが未使用」エラーが報告されます。彼らはそれが次のように書かれることを好むようです:

try:
    import unittest2
    TestCase = unittest2.TestCase
except ImportError:
    import unittest
    TestCase = unittest.TestCase
于 2012-11-12T13:14:03.910 に答える
0

イディオムを避けている私たちにとってfrom ... import ...、これはコードの残りの部分に対して透過的な方法で適切な単体テストをインポートします。

import sys
if sys.version_info < (2, 7):
    import unittest2 as unittest
else:
    import unittest
于 2015-04-20T17:10:53.827 に答える