Logowanie zamiast print
Podczas szukania błędu czujnika paliwa ktoś dodał print() dla każdego zbiornika. Błąd jest naprawiony, ale wypisywania zostały, a sprawdzanie przed odpaleniem zakopuje swoją jedyną ważną linię, pusty zbiornik, pod liniami, których nikt nie potrzebuje.
Przejdź na moduł logging, w którym każdy komunikat ma poziom, a ty decydujesz, które poziomy pokazać.
Ukończ etap 1, aby odblokować ten etap.
Zastąp każde print() wywołaniem logging dla jego poziomu: logging.debug(), logging.info(), logging.warning() albo logging.error(), i usuń poziom z tekstu, bo dodaje go format. Przy poziomie INFO linie debug znikają:
INFO TANK-1 w porządku: 78.3% WARNING TANK-2 ma mało paliwa: 12.4% ERROR TANK-3 jest pusty INFO Sprawdzanie zbiorników zakończone
Linię basicConfig() zostaw bez zmian. Ukryte testy przełączają ją na DEBUG i oczekują, że twoje linie debug wrócą.
Ukończ etap 1, aby odblokować ten etap.
W większym programie loguje każdy moduł. Daj temu kodowi własny logger, log = logging.getLogger("fuel"), loguj przez niego i dodaj jego nazwę do formatu przez %(name)s. Włącz wpisy debug tylko dla tego loggera przez log.setLevel(logging.DEBUG):
DEBUG fuel: sprawdzam TANK-1: 78.3% INFO fuel: TANK-1 w porządku: 78.3% DEBUG fuel: sprawdzam TANK-2: 12.4% WARNING fuel: TANK-2 ma mało paliwa: 12.4% DEBUG fuel: sprawdzam TANK-3: 0.0% ERROR fuel: TANK-3 jest pusty INFO fuel: Sprawdzanie zbiorników zakończone
Reszta programu zostaje na poziomie INFO: tylko logger paliwa pokazuje swoje linie debug.
Podpowiedzi
Import modułów systemowych
# Moduł to skrzynka z narzędziami, którą ktoś już zbudował i przetestował za Ciebie
# Zwykły import wczytuje cały moduł
import sys
import platform
import math
# from ... import wczytuje tylko jedno narzędzie
from math import sqrt
# as nadaje modułowi krótszy przydomek
import random as rng
# Przy zwykłym imporcie: nazwa modułu, kropka, potem narzędzie
print("Wersja Pythona:", platform.python_version())
print("System:", platform.system())
print("Python mieszka w:", sys.executable)
# math zawiera stałe, których nie chciałbyś wpisywać z pamięci
radius_km = 6371
print("Obwód Ziemi:", round(2 * math.pi * radius_km), "km")
# sqrt przyszło samo, więc nie potrzebuje kropki przed sobą
print("Pierwiastek kwadratowy z 9:", sqrt(9))
# rng to po prostu przydomek dla random
print("Losowy dzień roku marsjańskiego:", rng.randint(1, 687))
Oddziel argumenty przecinkami. Każde uruchomienie przekazuje je jako sys.argv[1:].