我观察到 Python 3 unittest 的奇怪行为。在功能中的 Testcase 测试testValue
一个不存在的模块之后。
import sys
import unittest
class ModuleTest(unittest.TestCase):
def testValue(self):
import unknown_module
result = unknown_module.value
self.assertEqual(0.0, result)
if __name__ == "__main__":
print(sys.version)
unittest.main()
Python2 正确给出了以下输出:
2.7.5 (default, May 15 2013, 22:44:16) [MSC v.1500 64 bit (AMD64)]
E
======================================================================
ERROR: testValue (__main__.ModuleTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\bin\WinPython-64bit-2.7.5.1\workspace\unknown_module_test.py", line 7, in testValue
import unknown_module
ImportError: No module named unknown_module
----------------------------------------------------------------------
Ran 1 test in 0.000s
FAILED (errors=1)
但是 Python 3 在unknown_module.value
引用 时会声明一个 AttributeError 。
3.3.0 (v3.3.0:bd8afb90ebf2, Sep 29 2012, 10:55:48) [MSC v.1600 32 bit (Intel)]
E
======================================================================
ERROR: testValue (__main__.ModuleTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "unknown_module_test.py", line 8, in testValue
result = unknown_module.value
AttributeError: 'module' object has no attribute 'value'
----------------------------------------------------------------------
Ran 1 test in 0.016s
FAILED (errors=1)
为什么不像ImportError
Python 2 那样抛出 Python 3?