2017-04-24 17 views
0

このコードはPython 3.5では動作しますが、2.7では動作しません。python2.7とpython3.5の名前付きタプルとタプルの比較の違い

mock.ANY特殊オブジェクトを含む通常のタプルを使用して、名前付きタプルを照合しようとしています。

try: 
    import unittest.mock as mock # python 3.5 
except: 
    import mock # python 2.7 

def test_datetime(): 
    from collections import namedtuple 
    from datetime import datetime 
    A = namedtuple("A", ["a", "b"]) 
    now = datetime.utcnow() 
    def foo(a): 
     a.bar(A(now, "b")) 
    a = mock.MagicMock() 
    foo(a) 
    a.bar.assert_called_once_with((mock.ANY, "b")) 

if __name__ == "__main__": 
    print("Testing") 
    test_datetime() 

どうすればpython 2.7でも動作させることができますか? その理由は何ですか?

私は通訳のバージョン

にEDIT変更することはできません。また、モックが異なるオブジェクトとしてタプルとnamedtuplesを見ているいくつかの理由

try: 
    import unittest.mock as mock # python 3.5 
except: 
    import mock # python 2.7 
from collections import namedtuple 
from datetime import datetime 
now = datetime.now() 
A = namedtuple("A", ["a"]) 
(mock.ANY,)==A(now) # False in py2.7, true in py3.5 

答えて

0

に減少

を。次のコードはpythonで私に渡します。2.7

>>> def test_datetime(): 
...  from collections import namedtuple 
...  from datetime import datetime 
...  A = namedtuple("A", ["a", "b"]) 
...  now = datetime.utcnow() 
...  def foo(a): 
...   a.bar(A(now, "b")) 
...  a = mock.MagicMock() 
...  foo(a) 
...  a.bar.assert_called_once_with(A(mock.ANY, "b")) 
関連する問題