3

我在python中有以下代码:

def update(request, id):
  success = 0

  try:
    product = Mattress.objects.get(id=id)
    success = 1
  except Mattress.DoesNotExist:
    pass

  if success == 1:
    return render_to_response("success.html")
  else:
    return render_to_response('failure.html')

此代码是检查“成功”布尔值的有效方法吗?如果代码通过了try语句,“success”会变为1还是保持为0?

4

5 回答 5

11

回答你的问题:

布尔值在python中是可变的吗?

是和不是。分配了布尔值的变量(可能总是,并且在这种情况下肯定)是可变的,是的。它们也不限于被分配布尔值,因为变量不是静态类型的。

但是布尔值TrueFalse它们本身是不可变的。它们是无法修改的单例。

查看您的实际代码:

if success = 1:

不是有效的语法,你想要一个==那里。此外,惯用语你不应该使用0and1作为成功和失败的值,你应该使用Trueand False。所以你应该重构为这样的东西:

def update(request):
    success = False

    try:
        product = Mattress.objects.get(id=id)
        success = True
    except Mattress.DoesNotExist:
        pass

    if success:
        return render_to_response("success.html")
    else:
        return render_to_response('failure.html')
于 2012-08-10T20:33:38.567 回答
1

是的。success成功时将更改为 1。

于 2012-08-10T20:29:47.317 回答
1

这个片段有一些问题。

  1. 首先,您没有使用布尔类型。Python 的布尔值是TrueFalse
  2. 其次,您没有在 if 语句中进行比较。该行在 Python 3 中无效。您要查找的是:if success == 1:if success == True:
  3. 无论布尔值的不变性如何,您仍然可以将布尔值分配给变量。我相信它们被存储为原始类型,因此它们与任何其他原始类型一样不可变。
于 2012-08-10T20:34:20.070 回答
1

您应该考虑使用实际的布尔值而不是整数。您可以设置successtrueor false,Python 会将它们解释为值 1 和 0 的关键字。使用数字可能有点棘手,因为某些语言解释的东西不同。在某些语言中,0 是false但除 0 之外的任何值都被考虑true。但是,您的问题的答案是肯定的,它会正常工作。

于 2012-08-10T20:36:48.523 回答
1

可能您提出的问题甚至与您要解决的问题无关。我认为有一种 Pythonic 方式可以通过以下方式实现您想要的:

def update(request):
    try:
        product = Mattress.objects.get(id=id)
    except Mattress.DoesNotExist:
        template_name = 'failure.html'
    else:
        template_name = 'success.html'

    return render_to_response(template_name)

基本上,如果抛出异常,即您将呈现的模板将是'failure.html'。另一方面,如果查询成功执行,将呈现“success.html”。

于 2018-05-10T23:16:20.590 回答