我观察到python3unittest有一个奇怪的行为。在函数testValue
中的Testcase测试之后,一个不存在的模块。在
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正确地给出以下输出:
^{pr2}$但是python3在引用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)
为什么python3不像python2那样抛出ImportError
?在
您正在导入一个隐式命名空间包。引用Python 3.3 What's New page:
和PEP 420 Implicit Namespace Packages:
以及
从您的
sys.path
中删除unknown_module
目录,您的测试将像在早期的Python版本中那样失败。在相关问题 更多 >
编程相关推荐