Blog JSystems - uwalniamy wiedzę!
Blog JSystems - uwalniamy wiedzę!

Przyjmijmy że mamy do zrealizowania program który będzie obliczał bmi na podstawie podanego wzrostu i masy:
def bmi(m,w):
return round(m/pow(w,2),2)
print( bmi(80,1.76) )
Wymagane jest by wzrost został podany w metrach a masa w kilogramach. Gdyby ktoś podał wzrost w centymetrach, wynik działania tej funkcji będzie bzdurą choć wartość liczbowa zostanie zwrócona. Chcielibyśmy w jakiś sposób reagować na taką sytuację. Możemy rzucić ogólnym wyjątkiem w ten sposób:
def bmi(m,w):
if w<1 or w>2.5:
raise Exception
return round(m/pow(w,2),2)
print( bmi(80,176) )
Taki wyjątek niewiele powie użytkownikowi naszej funkcji:
Traceback (most recent call last):
File "D:/data/workspace-python/python_sredniozaawansowany/main.py", line 6, in <module>
print( bmi(80,176) )
File "D:/data/workspace-python/python_sredniozaawansowany/main.py", line 3, in bmi
raise Exception
Exception
Wywołując wyjątek ogólny możemy przez argument konstruktora podać treść wyjątku:
def bmi(m,w):
if w<1 or w>2.5:
raise Exception('Wzrost poza zakresem')
return round(m/pow(w,2),2)
print( bmi(80,176) )
Wynik działania:
Traceback (most recent call last):
File "D:/data/workspace-python/python_sredniozaawansowany/main.py", line 6, in <module>
print( bmi(80,176) )
File "D:/data/workspace-python/python_sredniozaawansowany/main.py", line 3, in bmi
raise Exception('Wzrost poza zakresem')
Exception: Wzrost poza zakresem
Co jednak jeśli zechcielibyśmy stworzyć własną klasę wyjątku która byłaby reużywalna? Musimy stworzyć własną klasę dziedziczącą po klasie Exception by następnie wywołać tak stworzony wyjątek:
class HeightOutOfRangeException(Exception):
def __init__(self):
super().__init__('Wzrost poza zakresem')
def bmi(m,w):
if w<1 or w>2.5:
raise HeightOutOfRangeException
return round(m/pow(w,2),2)
print( bmi(80,176) )
W __init__ przekazujemy argument dla funkcji __init__ klasy po której dziedziczy - tj. Exception.
Wynik działania:
Traceback (most recent call last):
File "D:/data/workspace-python/python_sredniozaawansowany/main.py", line 10, in <module>
print( bmi(80,176) )
File "D:/data/workspace-python/python_sredniozaawansowany/main.py", line 7, in bmi
raise HeightOutOfRangeException
__main__.HeightOutOfRangeException: Wzrost poza zakresem.
Możemy również do wyjątku przekazać jakąś informację. W tym przypadku będzie to wzrost:
class HeightOutOfRangeException(Exception):
def __init__(self,w):
super().__init__(f'Wzrost poza zakresem. Podany wzrost: {w}')
def bmi(m,w):
if w<1 or w>2.5:
raise HeightOutOfRangeException(w)
return round(m/pow(w,2),2)
print( bmi(80,176) )
Wynik działania:
Traceback (most recent call last):
File "D:/data/workspace-python/python_sredniozaawansowany/main.py", line 10, in <module>
print( bmi(80,176) )
File "D:/data/workspace-python/python_sredniozaawansowany/main.py", line 7, in bmi
raise HeightOutOfRangeException(w)
__main__.HeightOutOfRangeException: Wzrost poza zakresem. Podany wzrost: 176
Ten kurs daje Ci solidne podstawy Pythona. Jeśli chcesz pójść dalej i pod okiem trenera dojść od pierwszej linijki kodu do własnego modelu uczenia maszynowego, sprawdź nasze pięciodniowe szkolenie Python od podstaw, przez analizę danych, do machine learning. Pierwsze trzy dni to Python w praktyce: typy i kolekcje, instrukcje warunkowe i pętle, funkcje, moduły i pakiety, pliki tekstowe, usługi sieciowe oraz praca z bazą PostgreSQL. Czwarty dzień to analiza danych w pandas (wczytywanie CSV, TSV i XLS, filtrowanie, agregacje, statystyki) i wizualizacja w Matplotlib, Seaborn oraz Plotly. Piąty dzień to uczenie maszynowe w scikit-learn: regresja liniowa i logistyczna, drzewa decyzyjne, las losowy, XGBoost, walidacja predykcji, dobór hiperparametrów i przeciwdziałanie przeuczeniu. Szkolenie ma terminy gwarantowane, czyli odbywa się niezależnie od wielkości grupy.
Szkolenie Python od podstaw, przez analizę danych, do machine learning
To szkolenie może być dofinansowane dla Ciebie z KFS lub BUR.
★★★★★Średnia ocena naszych szkoleń w Google: 5/5
Komentarze (0)
Brak komentarzy...