【问题标题】:Django/Python - Try/except problemDjango/Python - 尝试/排除问题
【发布时间】:2010-01-12 16:40:38
【问题描述】:

我有这样的代码:

try:
            var = request.POST['var']                                        
except NameError:                
            var = ''

为什么总是在“except”执行之后编码?即使request.POST['var'] 存在。

【问题讨论】:

    标签: python django variables


    【解决方案1】:

    你怎么知道它正在执行?也许request.POST['var'] 也是'',所以你无法区分。

    另外,唯一的方法

    var = request.POST['var'] 
    

    如果request 不存在,则可以引发NameError

    如果request.POST 不存在,则意味着POST 不作为request 的属性存在,因此引发AttributeError,如果request.POST['var'] 不存在,则意味着'var' 不存在request.POST 的一个键,从而提高了KeyError


    编辑:

    我猜你没有发送POST。但不能确定。

    【讨论】:

    • 'var' 绝对不是 epmty - 我在萤火虫中看到它。当我使用 AtrributeError 而不是 Name 错误时,我看到消息“Key 'var' not found in
    • 嗯,这意味着request.POST 中没有'var' - firebug 不是 python* ,它无法显示 python 内存、python 对象内容或任何内容在服务器上运行的脚本,因为 firebug 在浏览器上运行。你的假设是错误的。
    • 您混淆了两个 'var' - 堆栈帧中的 'var' 可能存在。但它肯定不作为您的 POST 中的键存在!这就是错误消息告诉您的内容。
    【解决方案2】:

    消除猜测,将NameError 替换为KeyboardInterrupt 之类的东西,查看回溯,您将确切知道问题所在。

    【讨论】:

    • 这是查找问题原因的最佳方法。 try/except 块很有用,但它们也可以隐藏您想要查找的问题。先把它从等式中拿出来。然后,在你解决了问题之后,把它放回去。
    【解决方案3】:

    一个更好的方法来做你似乎想要做的事情可能是

    var = request.POST.get('var', 'some default value')
    

    POST dict 的get 方法的第二个参数是如果键(在这种情况下为'var')不存在时返回的值。准确翻译您的示例将导致:

    var = request.POST.get('var', '')
    

    这样,就不需要try...except 块或条件语句。

    【讨论】:

    • 如果 request 未定义(这里似乎就是这种情况)将无济于事。
    【解决方案4】:

    在您的情况下,以下结果是什么?

    except NameError, e:
        print e
    

    【讨论】:

      【解决方案5】:

      试试

      尝试: 如果 request.method == 'POST': var = request.POST['var'] 除了名称错误: 变量 = ''

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-29
        • 2015-01-25
        • 2018-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多