奇怪的是,只有在WingIDE中启动才会出现,在命令行里执行就不会有这个错误。后来看了一下WingIDE的设置,原来可以Debug里的 Exception可以设置Never Report和Always Report,在Never Report里添加UnboundLocalError,同时在Always Report里去掉,这个异常就没有出现了。
再次运行,开始看到一大段的输出,时不时还有一些异常:
django.template.TemplateDoesNotExist: registration/password_change_form.html
输出大致如下:
Creating test database...
Creating table auth_permission
Creating table auth_group
Creating table auth_user
Creating table auth_message
Creating table django_content_type
Creating table django_session
Creating table django_site
Installing index for auth.Permission model
Installing index for auth.Message model
EE..E...EEEEEEE... ... ... ... ... ...
======================================================================
ERROR: test_password_change_fails_with_invalid_old_password (django.contrib.auth.tests.views.ChangePasswordTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "D:\Python25\Lib\site-packages\django\contrib\auth\tests\views.py", line 156, in test_password_change_fails_with_invalid_old_password
'new_password2': 'password1',
。。。。。
File "D:\Python25\Lib\site-packages\django\template\loader.py", line 74, in find_template_source
raise TemplateDoesNotExist, name
TemplateDoesNotExist: registration/password_change_form.html
原来运行的是manage.py test,默认把INSTALLED_APP里的其他模块的测试案例也运行了起来。这些异常也是允许那些测试案例抛出的,而我定义的测试案例貌似没有运行。来回看了几遍文档,百思不得其解。最后,打算直接看django的源码,为何没有加载我的测试案例,而像django.contrib.auth里的测试案例却都能执行起来。于是我一步一步的跟进去调试。最后发现:
首先会查找当前目录的models.py,如果这个模块Import失败的话不会再继续从tests模块里找。
也就是说,我必须定义一个models.py文件,即使里面没有内容。于是,我添加了一个models.py文件问题就解决了!