为什么我的 try catch 解决方案没有像我预期的那样工作

Why is my try catch solution not working as I expect it

我正在尝试验证 Django 项目中的表单,验证的一部分是检查项目是否存在。

环境:

python 3.6.3
django 1.10.8
python-keystoneclient 3.14.0

我目前有这张支票

def clean_projectname(self):
        submitted_data = self.cleaned_data['projectname']
        newproj = "PROJ-FOO" + submitted_data.upper()
        keystone = osauth.connect()
        try:
            project = keystone.projects.find(name=newproj)
            raise forms.ValidationError('The project name is already taken')
        except NotFound:
            return submitted_data

try 部分将 return 一个项目对象,或者它将有一个 404 未找到异常。

我尝试在 NotFound 上排除,但 Django 给我一个错误

name 'NotFound' is not defined

我将不胜感激。

您是否从 python-keystoneclient 导入了 NotFound?如果您的文件中的其他地方有此行,您的代码将起作用的唯一方法是:

from keystoneclient.exceptions import NotFound

我不知道 NotFound 异常。它是您自己编写的,还是您打算使用类似声音的 Django 异常?

https://docs.djangoproject.com/en/2.0/ref/exceptions/