一個愚蠢的python邏輯語法錯誤

榮耀屬於跪拜貓發表於2013-09-20

這個事情再次佐證了一個莫名其妙的現象背後一定會有一個愚蠢到無以復加的錯誤的真理。

 

寫python單元測試的時候發現一個莫名其妙的問題:

    def xmlStandander(self,s):
            return xml.dom.minidom.parseString(s).toxml();
            
    def assertEqualXMLStruct(self,get,wanted):
        self.assertEqual(
            self.xmlStandander(get),
            self.xmlStandander(wanted)
        );

 這兩個函式是用於測試的輔助函式。

測試函式被這樣呼叫:

    def testNoneExpect(self):
        self.assertEqualXMLStruct
        (
            mapToXmlElement("item", {}), 
            '<item></item>' 
        );

 測試通過。我很無知的認為什麼問題都沒有了。

D:\temp\py>xmltest.py
......
----------------------------------------------------------------------
Ran 6 tests in 0.016s

OK

 

直到我很無聊的打算在裡頭引發一個異常:

 

    def assertEqualXMLStruct(self,get,wanted):
        raise ValueError();
        self.assertEqual(
            self.xmlStandander(get),
            self.xmlStandander(wanted)
        );

 執行。。。咦,怎麼會依然OK?

D:\temp\py>xmltest.py
......
----------------------------------------------------------------------
Ran 6 tests in 0.016s

OK

 

幹掉這個ValueError,換個位置。。我在這裡引發:

 

    def testNoneExpect(self):
        raise ValueError();
        self.assertEqualXMLStruct
        (
            mapToXmlElement("item", {}), 
            '<item></item>' 
        );
        

 這回成功的引發了異常。。

D:\temp\py>xmltest.py
....E.
======================================================================
ERROR: testNoneExpect (__main__.TestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "D:\temp\py\xmltest.py", line 82, in testNoneExpect
    raise ValueError();
ValueError

----------------------------------------------------------------------
Ran 6 tests in 0.000s

FAILED (errors=1)

 

真是個詭異的問題。。。

 

然後我很無趣的決定在裡頭隨便亂來一下。。。

    def assertEqualXMLStruct(self,get,wanted):
        asdfasasasdfasgadgfads
        self.assertEqual(
            self.xmlStandander(get),
            self.xmlStandander(wanted)
        );

 結果如下:

D:\temp\py>xmltest.py
......
----------------------------------------------------------------------
Ran 6 tests in 0.000s

OK

這極大的顛覆了我的人生觀和世界觀。。。然後我試了試這個。。

    def testNoneExpect(self):
        asdfasasasdfasgadgfads
        self.assertEqualXMLStruct
        (
            mapToXmlElement("item", {}), 
            '<item></item>' 
        );

 結果如下:

D:\temp\py>xmltest.py
....E.
======================================================================
ERROR: testNoneExpect (__main__.TestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "D:\temp\py\xmltest.py", line 84, in testNoneExpect
    asdfasasasdfasgadgfads
NameError: global name 'asdfasasasdfasgadgfads' is not defined

----------------------------------------------------------------------
Ran 6 tests in 0.016s

FAILED (errors=1)

 很明顯,我敲入的這一堆亂七八糟的東西不是魔力字元,而是那個函式沒有執行。

 

那麼為什麼沒有執行呢?

 

揭曉正確答案。。。。。。

 

~~~~~~~悲催的分割線~~~~~~~

正確的呼叫方法如下:

    def testNoneExpect(self):
        self.assertEqualXMLStruct(
            mapToXmlElement("item", {}), 
            '<item></item>' 
        );

 我的世界終於被久違的糾正了:

D:\temp\py>xmltest.py
....E.
======================================================================
ERROR: testNoneExpect (__main__.TestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "D:\temp\py\xmltest.py", line 84, in testNoneExpect
    asdfasasasdfasgadgfads
NameError: global name 'asdfasasasdfasgadgfads' is not defined

----------------------------------------------------------------------
Ran 6 tests in 0.000s

FAILED (errors=1)

 祝福你們。。。。

相關文章