Mam następujący kod w Pythonie:

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')

Czy ten kod jest ważnym sposobem sprawdzenia booletu "sukcesu". Jeśli kod przechodzi przez oświadczenie o wypróbowaniu, "sukces" zostanie zmieniony na 1, czy pozostanie na 0?

3
goelv 11 sierpień 2012, 00:27

4 odpowiedzi

Tak. success zostanie zmieniona na sukces na 1.

1
Jason Orendorff 10 sierpień 2012, 20:29

Istnieje kilka rzeczy nie tak z tym fragmentem.

  1. Po pierwsze, nie używasz typu boolowskiego. Booleans Pythona są True i False.
  2. Po drugie, nie porównujesz w swoim oświadczeniu. Ta linia nie jest ważna w Pythonie 3. czego szukasz, to: if success == 1: lub if success == True:
  3. Nadal byłbyś w stanie przypisać wartość logiczną zmienną niezależnie od niezmienności boolowskiej. Wierzę, że są przechowywane jako typ prymitywny, więc są równie niezmienne jak każdy inny typ prymitywny.
1
Wug 10 sierpień 2012, 20:34

Powinieneś rozważyć przy użyciu rzeczywistego boolowskiego, a nie całkowitego. Możesz ustawić success do true lub false i Python interpretuje je jako słowa kluczowe do wartości 1 i 0. Korzystanie z numerów może być nieco trudne, ponieważ niektóre języki interpretuje różne rzeczy różne. W niektórych językach 0 oznacza false, ale każda wartość oprócz 0 jest uważana za true. Jednak odpowiedź na twoje pytanie brzmi: tak, będzie działać dobrze.

1
minhaz1 10 sierpień 2012, 20:36

Prawdopodobnie pytanie, które pytasz, nie jest nawet związane z problemem, który próbujesz rozwiązać. Myślę, że jest peythonic sposób na osiągnięcie tego, co chcesz:

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)

Zasadniczo, jeśli zostanie wyrzucony wyjątek, tj. Szablon, który renderujesz, będzie "porażka.html". Z drugiej strony, jeśli zapytanie zostanie wykonane pomyślnie, zostanie zrealizowany "sukces.html".

0
lmiguelvargasf 10 maj 2018, 23:26