← Artykuły

Python: zero nie oznacza braku danych

Odróżnij brak pola, zero, None i niepoprawny typ na działającym przykładzie API.

Podkreślone pojęcia mają objaśnienia. Kod możesz skopiować i uruchomić u siebie.

Spis treści i pojęcia

Pojęcia pod ręką

Kliknij termin, aby zobaczyć definicję.

Cały słownik →

Zero jest wartością, a nie brakującym polem

przyjmuje limit powiadomień. Zero oznacza „nie wysyłaj”, a brak pola „użyj wartości domyślnej”. Skrót value or 10 traktuje oba przypadki tak samo i po cichu zamienia zero na dziesięć.

Uruchom mały przykład

Zapisz jako limit.py i uruchom python3 limit.py z Pythonem 3.11 lub nowszym. Bez pakietów i serwera.

python
def limit(data: dict) -> int:
    if "limit" not in data:
        return 10
    value = data["limit"]
    if type(value) is not int or not 0 <= value <= 100:
        raise ValueError("limit must be an integer from 0 to 100")
    return value

print(limit({}))
print(limit({"limit": 0}))
try:
    limit({"limit": None})
except ValueError:
    print("invalid")

Oczekiwany wynik:

text
10
0
invalid

Sprawdzenie klucza mówi, czy klient przesłał pole. Sprawdzenie typu i zakresu mówi, czy wartość spełnia . Jawne None jest tutaj błędem: to świadoma reguła tego API, nie reguła wszystkich aplikacji.

bool jest w podklasą int. Porównanie dokładnego typu celowo odrzuca True: wartość logiczna nie jest w tym kontrakcie liczbą powiadomień. Sama adnotacja typu nie waliduje danych.

Sprawdź kuszący skrót

Zastąp ciało przez return data.get("limit") or 10. Uruchom te same przypadki. Zarówno zero, jak i jawne None stają się dziesięć. Odpowiedź mogłaby nadal oznaczać sukces, mimo błędnej reguły biznesowej.

Przywróć funkcję. Dopisz sprawdzenia dla 100, 101, True i tekstu "2". Przed uruchomieniem podziel je na akceptowane i odrzucane. Nie zamieniaj tekstu na liczbę, jeśli kontrakt API tego nie dopuszcza.

Zastosuj regułę gdzie indziej

Żądanie zmienia profil: brak pseudonimu oznacza „pozostaw”, a null oznacza „wyczyść”. To inny kontrakt. Zapisz oczekiwane wyniki, zanim wybierzesz get, wartość domyślną albo . nie musi odpowiadać biznesowemu znaczeniu braku danych.

Źródła

SPRAWDŹ SWOJĄ INTUICJĘ

Czy wartość zero oznacza brak pola?

TERAZ TWÓJ KOD

Zrozumienie sprawdź w praktyce.

Poznaj codzienne konstrukcje Pythona i przykłady wyboru właściwej reguły.

Otwórz materiał i ćwiczenia →