You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django表单验证try-catch失效:NotFound异常未定义求助

解决Django表单验证中NotFound异常未定义的问题

嘿,这个问题我之前碰到过!你之所以收到name 'NotFound' is not defined的错误,核心原因很简单:你没有导入python-keystoneclient库中的NotFound异常类,Python解释器自然不知道这个异常是什么。

解决步骤:

  1. 导入正确的异常类
    在python-keystoneclient 3.14.0版本中,NotFound异常位于keystoneclient.exceptions模块下,所以你需要在文件顶部添加这个导入语句:

    from keystoneclient.exceptions import NotFound
    
  2. 修改你的表单验证代码
    导入完成后,你的clean_projectname方法就能正常捕获NotFound异常了。这里给你整理了完整的修正后代码:

    from django import forms
    from keystoneclient.exceptions import NotFound
    # 导入你的osauth模块等其他依赖...
    
    class YourProjectForm(forms.Form):
        # 这里定义你的表单字段,比如projectname输入框
        projectname = forms.CharField(label="Project Name", max_length=100)
    
        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
            # 可选:额外捕获其他异常,避免未知错误导致表单崩溃
            except Exception as e:
                raise forms.ValidationError(f"Failed to check project existence: {str(e)}")
    

额外提示:

如果导入后还是出现问题,可以检查本地安装的python-keystoneclient包结构,确认NotFound的位置——不同版本的库可能有路径变化,但3.14.0版本确实是在keystoneclient.exceptions下。另外,建议在捕获异常时,尽量避免直接捕获Exception(除非你需要处理所有未知错误),优先捕获明确的异常类型,这样代码更健壮。

内容的提问来源于stack exchange,提问作者Lance Haig

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:42:58