2017-06-22 77 views
0

我正在用Visual Studio 2015(Python工具擴展)調試Python。Python調試失敗 - 執行結束

我對Python很陌生,奇怪的是,當我調試波紋管代碼時,它運行到第18行,然後是第19行,然後是第18行,它再次毫不客氣地退出。不打我的catch塊,不打20或21行。沒有錯誤信息。任何人都知道可能會造成這種情況?

單元測試正在測試Git Hub here上的常見google api功能。

我的代碼:

import unittest 
import sys 
import os 
import exceptions 
from _multiprocessing import flags 


sys.path.insert(0, "C:\Users\Jamie.Marshall\Documents\Visual Studio 2015\Projects\GetDCMPlalyStationData\DCMPSDataQuery") 

try: 
    from dfareporting_utils import get_arguments 
except ImportError: 
    print(ImportError.message) 
    print('No Import') 


try: 
#Line18 
    class Test_dfareporting_utility_test(unittest.TestCase): 
#Line19             
     def test_A(self):       
      flags = get_arguments(sys.argv, __doc__, parents=[argparser]) 
      self.assertEqual(flags[0], "") 

except Exception as ex: 
    print(ex.message) 
    print(ex.source) 

    if __name__ == '__main__': 
     unittest.main() 
+1

當一個類被初始化,只有簽名行並執行裏面的方法的代碼。只有在調用方法時纔會執行方法中的代碼。除非'class'或'def'行出現錯誤,否則圍繞該類的'try'將不起作用。 –

+0

結果如何刪除try模塊?克勞斯所說的應該是一個很大的可能性「除非在課堂或高清線上出現錯誤,否則你在課堂上的嘗試將無效。」 –

+0

克勞斯是對的。我不明白腳本的運行順序。 @克勞斯D你可以發佈答案,所以我可以標記回答?非常感謝。 –

回答

1

當一個類被初始化時,只有類的簽名行,在類和簽名行方法內執行的頂層的代碼。只有在調用方法時纔會執行方法中的代碼。例如:

E class MyClass: 
| 
E  my_class_attribute = 1 
| 
E  def my_method(self, a): 
N   b = a + 1 
N   return b 

E = excuted; N = not executed 

除非在類或def線上出現錯誤,否則您在類中的嘗試將不起作用。

在結果中,如果在其中一行中出現錯誤,則您在類中的嘗試將不起作用。

要在測試中發現異常,請在方法內部輸入try/except。但是你實際上應該有一個確定的狀態在您的測試和錯誤應該被預期或不存在,所以它可能是最好的指望得到一個錯誤,測試與with self.assertRaises(YourErrorType):