【问题标题】:Python Debug Fail - execution endsPython 调试失败 - 执行结束
【发布时间】:2017-11-25 03:30:18
【问题描述】:

我正在使用 Visual Studio 2015(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()

【问题讨论】:

  • 类初始化时,只执行签名行和里面方法的代码。方法中的代码只有在方法被调用时才会执行。除非在 classdef 行上引发错误,否则您在班级周围的 try 将无效。
  • 去掉try模块的结果如何? Klaus 所说的应该很有可能“除非在 class 或 def 行上引发错误,否则您对 class 的尝试将没有任何效果。”
  • 克劳斯是对的。我不明白脚本的运行顺序。 @Klaus D 您可以将其作为答案发布,以便我标记为已回答吗?非常感谢。

标签: python visual-studio unit-testing debugging


【解决方案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):进行测试

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-16
    • 2014-02-10
    • 1970-01-01
    相关资源
    最近更新 更多