Pięć setek szaleństwa

Wtem!

— Leży!

Produkcja? Ale tutaj?

Traceback (most recent call last):
  File "/var/www/foo/catalogue/views.py", line 252, in get
    product = Product.objects.get(upc=tokens[0])
  File "/usr/lib/python2.6/site-packages/django/db/models/manager.py", line 132, in get
    return self.get_query_set().get(*args, **kwargs)
  File "/usr/lib/python2.6/site-packages/django/db/models/query.py", line 351, in get
    % (self.model._meta.object_name, num, kwargs))
TypeError: 'DoesNotExist' object is not callable

Odśwież. Działa. Ki czort? Odśwież. Leży. Działa — działa — leży — działa. Wynik zdaje się zależeć od procesu, który akurat obsłuży zapytanie.

No dobrze, zobaczmy, co…

        raise self.model.MultipleObjectsReturned("get() returned more than one %s -- it returned %s! Lookup parameters were %s"
                % (self.model._meta.object_name, num, kwargs))

Wyjątek. W trakcie rzucania wyjątku. Wbudowanego w klasę modelu.

Wdech, wydech. Drugi worker dostał. Dziwacznie poskręcane fragmenty jego wnętrzności zasypują mi skrzynkę.

Wdech, wydech, grep.

Zanim się przedarłem, straciliśmy jeszcze trzech. W sumie połowa zwijała się tam i charczała wewnętrznymi błędami. Wytrzymajcie, jeszcze tylko kilka plików. I jest.

        try:
            product = Product.objects.get(upc=product_upc)
        except Product.DoesNotExist, Product.MultipleObjectsReturned:
            # …

Zasadzka — sztuk trzy w projekcie — ładnie nas urządzili. Jeden koniec kodu powoli kopie dołek pod drugim. Pułapki udało się usunąć, ale tamtym już nikt nie pomoże. Przysłanie na produkcję posiłków zajmie minimum trzy dni. Pozostaje tylko patrzeć, jak jeden po drugim toną w tym dziwacznym morzu bezradności, serwując skomplikowane dokumenty, jednak dławiąc się na najprostszych rzeczach. Zostali sami. Oni i pięć setek szaleństwa.

Kurtyna. Niestosowne słowa cisną mi się na usta, ubliżać chcę składni, albowiem łaknę Pythona trzeciej inkarnacji.

4 myśli nt. „Pięć setek szaleństwa

  1. A jak w pythonie 3 nie wyglądało by to podobnie? Składnia wyjątków chyba jest podobna, czy czegoś nie złapałem?

  2. Ja bym przede wszystkim nie łączył obsługi takich dwóch wyjątków. To są jednak odmienne sytuacje, inne są ich przyczyny, waga i inne powinno być zachowanie programu (przynajmniej w środku).

  3. @PiotrB:

    A gdyby to były dwa inne wyjątki, to wpłynęłoby to w jakimś znaczącym stopniu na 500 na drugim końcu serwisu? Jakość tego kodu to problem zupełnie prostopadły do opisywanego.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Możesz użyć następujących tagów oraz atrybutów HTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>