python try except python handling exception with examples
Ten samouczek wyjaśnia obsługę wyjątków w Pythonie przy użyciu bloku Try Except z pomocą przykładów programowania:
Dwa typy błędów mogą spowodować nagłe zatrzymanie programu w języku Python, np. Błędy składniowe , i Wyjątki . W tym samouczku omówimy drugi typ błędu (wyjątki) w ramach kilku ważnych tematów.
Wiele skorzystamy na obsłudze wyjątków w naszej aplikacji, takich jak:
- Tworzenie solidnej aplikacji.
- Tworzenie czystego i wolnego od błędów kodu.
=> Odwiedź tutaj, aby zapoznać się z ekskluzywną serią samouczków szkoleniowych Python
Czego się nauczysz:
darmowy ripper dvd dla systemu Windows 10
- Python Try Except
- Typowe wyjątki w Pythonie
- Wniosek
Python Try Except
Jedną dobrą wiadomością jest to, że Python ma dużą liczbę wbudowanych wyjątków, które wychwytują błędy w naszym kodzie. Daje nam również możliwość tworzenia niestandardowych wyjątków, gdy żaden z wbudowanych wyjątków nie odpowiada naszym potrzebom.
Co to jest wyjątek
Więc jaki jest wyjątek w Pythonie? Cóż, mówiąc prosto, za każdym razem, gdy interpreter Pythona próbuje wykonać nieprawidłowy kod, zgłasza wyjątek, aw przypadkach, gdy taki wyjątek nie jest obsługiwany, zakłóca normalny przepływ instrukcji programu i drukuje ślad zwrotny.
Utwórzmy nieprawidłowy kod i zobaczmy, jak zareaguje interpreter języka Python.
Otwórz powłokę Pythona i uruchom następujący kod.
>>> 50/0
To jeden z najczęstszych błędów w programowaniu. Powyższy kod próbuje podzielić liczbę pięćdziesiąt przez 0 (zero). Interpreter Pythona widzi to jako nieprawidłową operację i podnosi plik ZeroDivisionError , zakłóca działanie programu i wyświetla dane śledzenia.
Widzimy to wyraźnie ZeroDivisionError jest wyjątkiem, który został zgłoszony. To rzeczywiście własny sposób Pythona, który mówi nam, że dzielenie liczby przez zero nie jest fajne. Chociaż w innych językach, takich jak JavaScript, nie jest to błąd; a Python surowo zabrania tej praktyki.
Warto też wiedzieć, że jest to tylko obiekt wyjątku, a Python ma wiele wbudowanych takich obiektów. Sprawdź tego oficjalnego Pythona dokumentacja aby zobaczyć wszystkie wyjątki wbudowane w Pythonie.
Zrozumieć Traceback
Zanim przejdziemy do obsługi wyjątków, myślę, że pomoże to zrozumieć, co dokładnie się stanie, jeśli wyjątki nie będą obsługiwane i jak Python robi wszystko, aby poinformować nas o naszym błędzie.
Za każdym razem, gdy Python napotka błąd, zgłasza wyjątek. Jeśli ten wyjątek nie jest obsługiwany, generuje pewne informacje o nazwie Traceback. Jakie informacje zawiera to śledzenie?
Zawiera:
- Komunikat o błędzie, który informuje nas, jaki wyjątek został zgłoszony i co się stało przed zgłoszeniem tego wyjątku.
- Różne numery wierszy kodu, które spowodowały ten błąd. Błąd może być spowodowany sekwencją wywołań funkcji o nazwie a stos wywołań które omówimy później tutaj.
Chociaż jest to trochę zagmatwane, obiecujemy, że następny przykład przyniesie więcej światła do naszego zrozumienia.
Przypomnijmy sobie zapis śledzenia, który został wydrukowany z dzielenia 50 na 0 powyżej, widzimy, że ślad zwrotny zawiera następujące informacje:
- Plik „”: informuje nas, że ten kod został uruchomiony z terminala konsoli.
- linia 1: To mówi nam, że błąd wystąpił w tym numerze linii.
- ZeroDivisionError: podział przez zero: Informuje nas, jaki wyjątek został zgłoszony i co go spowodowało.
Spróbujmy innego przykładu i może zobaczmy, jak stos wywołań wygląda jak. Otwórz edytor, wprowadź poniższy kod i zapisz jako tracebackExp .py
def stack1(numb): # 1 div = 0 # 2 stack2(numb, div) # 3 def stack2(numb, div): # 5 compute = numb/div # 6 print(compute) # 7 if __name__ == '__main__': # 9 numb = 5 # 10 stack1(numb) # 11
Otwórz terminal w katalogu, w którym znajduje się ten plik i uruchom.
python tracebackExp.py
Zobaczysz następujące dane śledzenia:
Powyższe śledzenie może wydawać się zagmatwane, ale tak naprawdę nie jest. Pythonistas wymyślił najlepszy sposób na odczyt danych traceback, czyli z oddolnie . Skorzystajmy więc z tej mądrości, aby spróbować zrozumieć, co ma do zaoferowania to śledzenie.
- Na samym dole otrzymujemy zgłoszony wyjątek i powód, dla którego został zgłoszony.
- Idąc w górę, otrzymujemy nazwę pliku tracebackExp .py tam, gdzie wystąpił ten błąd, obliczenia, które spowodowały ten błąd compute = numb / div, funkcja stack2 i wiersz numeru łącza 6, w którym wykonano to obliczenie.
- Idąc w górę, widzimy, że nasza funkcja stack2 została wywołana w funkcji stack1 w linii numer 3.
- Przechodząc na górę, widzimy, że funkcja stack1 została wywołana w linii numer 11.< moduł > mówi nam, że jest to plik, który jest wykonywany.
Typowe wyjątki w Pythonie
Biblioteka Pythona definiuje bardzo dużo wbudowanych wyjątków. Możesz sprawdzić dokumentację Pythona lub wywołać wbudowany plik lokalny () działa jak poniżej:
>>> dir(locals()['__builtins__'])
Nie będziemy próbować zajmować się wszystkimi tymi wyjątkami, ale zobaczymy kilka typowych wyjątków, na które prawdopodobnie się natkniesz.
# 1) TypeError
Jest wywoływany, gdy operacja lub funkcja jest stosowana do obiektu niewłaściwego typu.
Przykład 1
Rozważ poniższy program. Pobiera dywidendę i dzielnik, a następnie oblicza i drukuje wynik podzielenia dywidendy przez dzielnik.
def compute_division(): dividend = int(input('Enter the dividend: ')) # cast string to int divisor = input('Enter the divisor: ') # no casting # Compute division result = dividend/divisor # print result print('The result of {}/{} is: {}'.format(dividend, divisor, result)) if __name__ == '__main__': result = compute_division()
Żądamy wartości dywidendy i dzielnika od użytkownika, ale zapominamy o rzutowaniu wartości ciągu dzielnika na liczbę całkowitą. Tak więc otrzymujemy typ dywidendy będący liczbą całkowitą ( int ), a typ dzielnika to string ( p ). Następnie otrzymujemy TypeError ponieważ operator dzielenia (/) nie działa na łańcuchach.
Może Cię zainteresować fakt, że w przeciwieństwie do Pythona, JavaScript ma koercję typu, która w zasadzie konwertuje jeden z typów operandów na równoważną wartość typu drugiego operandu, gdy operandy są różnych typów.
# 2) ValueError
Jest to zgłaszane, gdy operacja lub funkcja otrzymuje argument, który ma właściwy typ, ale niewłaściwą wartość.
Przykład 2
Rozważ nasz program w Przykład 1 powyżej.
Jeśli użytkownik wprowadzi alfanumeryczną wartość dywidendy, taką jak „3a”, nasz program zgłosi wyjątek ValueError. Dzieje się tak, ponieważ chociaż Python int () przyjmuje dowolną liczbę lub ciąg znaków i zwraca obiekt będący liczbą całkowitą, wartość ciągu nie powinna zawierać liter ani żadnej wartości nieliczbowej.
# 3) AttributeError
Ten wyjątek jest zgłaszany podczas przypisywania lub odwoływania się do atrybutu, który nie istnieje.
Przykład 3
Rozważ poniższy program. Pobiera liczbę i oblicza jej pierwiastek kwadratowy za pomocą Moduł matematyczny Pythona
import math # import math library to gain access to its code def compute_square_root(number): # compute the square root using the math library result = math.sqr(number) return result if __name__ == '__main__': # get input to compute from user number = int(input('Compute Square root of: ')) # call function to compute square root
Kiedy użytkownik wprowadza liczbę, nasz program próbuje użyć funkcji z modułu matematycznego, aby obliczyć pierwiastek kwadratowy, ale po prostu popełniliśmy błąd. Zamiast sqrt, przez pomyłkę wpisaliśmy sqr, którego nie ma w module matematycznym.
Tak więc próbowaliśmy odwołać się do atrybutu sqr, który nie istnieje, i doprowadziło to do zgłoszenia wyjątku AttributeError. Większość z nas popełnia tego rodzaju błędy. Więc nie jesteś sam.
Obsługa wyjątków za pomocą Try Except
Jako programista, jedną rzeczą, na którą większość z nas będzie spędzać czas, jest pisanie solidnego kodu, który jest odporny. Kod, który nie psuje się z powodu pewnych błędów. W Pythonie możemy to osiągnąć, zamykając nasze instrukcje wewnątrz pliku próbować - z wyjątkiem komunikat.
Instrukcja Try-Except w języku Python
Instrukcja try-except ma następującą strukturę:
try: #your code goes here except '''Specify exception type(s) here''': #handle exception here
Załączmy kod tracebackExp .py wewnątrz instrukcji try-except.
def stack1(numb): # 1 div = 0 # 2 stack2(numb, div) # 3 def stack2(numb, div): # 5 try: # 6 compute = numb/div # 7 print(compute) # 8 except ZeroDivisionError as zde: # 9 print(zde) # 10 if __name__ == '__main__': # 12 numb = 5 # 13 stack1(numb) # 14 print('program continuous') # 15
Uruchomienie tego kodu wygeneruje wynik
Tak działa instrukcja try-except. Python wykonuje kod w bloku try linia 7-8 . Jeśli nie zostanie znaleziony niepoprawny kod, to kod w bloku oprócz wiersz 10 jest pomijany i wykonywanie jest kontynuowane.
Ale jeśli zostanie znaleziony nieprawidłowy kod, to wykonanie natychmiast zatrzymuje się w bloku try i sprawdza, czy zgłoszony wyjątek pasuje do tego, który podaliśmy w instrukcji except wiersz 9 . Jeśli pasuje, wykonywany jest blok except i kontynuowany. Jeśli tak się nie stanie, program przerwie.
Blok try-block zwykle zawiera kod, który może zgłosić wyjątek, podczas gdy blok except-block przechwytuje i obsługuje wyjątek.
Obsługa wielu wyjątków z wyjątkiem
Możemy obsłużyć wiele wyjątków z jednym „wyjątkiem” lub wieloma „wyjątkami”. Wszystko zależy od tego, jak chcesz obsłużyć każdy wyjątek.
# 1) Obsługa wielu wyjątków za pomocą jednego wyjątku
try: #your code goes here except(Exception1[, Exception2[,...ExceptionN]]]): #handle exception here
Ta metoda jest używana, gdy podejrzewamy, że nasz kod może powodować różne wyjątki i chcemy w każdym przypadku wykonać tę samą akcję. Tak więc, jeśli interpreter Pythona znajdzie dopasowanie, kod zapisany w bloku except zostanie wykonany.
Rozważmy poniższy przykład kodu w Pythonie
to klucz sieciowy taki sam jak hasło
def get_fraction(value, idx): arr = [4,5,2,0] # a list of numbers idx_value = arr[idx] # if idx is > arr length, IndexError will be raised value/idx_value # if idx_value == 0, ZeroDivisionError will be raised if __name__ =='__main__': # set 'value' and 'idx' value = 54 idx = 3 # call function in a try-except statement. try: result = get_fraction(value, idx) print('Fraction is ', result) except (IndexError, ZeroDivisionError) as ex: print(ex)
Mamy dwa możliwe wyjątki, które można tu podnieść, ZeroDivisionError i IndexError . Jeśli którykolwiek z tych wyjątków zostanie zgłoszony, zostanie wykonany blok except.
W powyższym kodzie idx = 3, więc idx_ wartość staje się 0 i wartość / idx_ wartość podniesie ZeroDivisionError
# 2) Obsługa wielu wyjątków z wieloma wyjątkami
try: #your code goes here except Exception1: #handle exception1 here except Exception2: #handle exception2 here except ExceptionN: #handle exceptionN here
Jeśli wolelibyśmy, aby każdy wyjątek był obsługiwany osobno, możesz to zrobić w następujący sposób.
Rozważmy przykładowy kod w Pythonie poniżej
def get_fraction(value, idx): arr = [4,5,2,0] # a list of numbers idx_value = arr[idx] # if idx is > arr length, IndexError will be raised value/idx_value # if idx_value == 0, ZeroDivisionError will be raised if __name__ =='__main__': # set 'value' and 'idx' value = 54 idx = 5 # call function in a try-excepts statement. try: result = get_fraction(value, idx) print('Fraction is ', result) except IndexError: print('idx of {} is out of range'.format(idx)) except ZeroDivisionError: print('arr[{}] is 0. Hence, can't divide by zero'.format(idx)) except Exception as ex: print(ex) print('Not sure what happened so not safe to continue, app will be interrupted') raise ex
Zauważyliśmy tutaj, że w ostatniej instrukcji oprócz wyjątku użyto wyjątku. Dzieje się tak, ponieważ obiekt wyjątku Exception pasuje do każdego wyjątku. Z tego powodu zawsze powinien być ostatni, ponieważ Python przestanie sprawdzać inne procedury obsługi wyjątków, gdy jeden pasuje.
W powyższym kodzie idx = 5 , W związku z tym arr [idx] wzrośnie IndexError dlatego idx jest większa niż długość listy arr
Ponadto nie masz pewności, który wyjątek został zgłoszony przez aplikację, nigdy nie jest bezpieczny, aby kontynuować wykonywanie. Dlatego mamy typ Exception, który pozwala wychwycić nieprzewidziane wyjątki. Następnie informujemy użytkownika i przerywamy aplikację, zgłaszając ten sam wyjątek.
Wypróbuj instrukcję Else
To jest funkcja opcjonalna obsługi wyjątków i pozwala na dodanie kodu, który chcesz uruchomić, gdy nie wystąpiły żadne błędy. Jeśli wystąpi błąd, ten inny blok nie zostanie uruchomiony.
Rozważ poniższy przykład kodu w Pythonie, otwórz edytor i zapisz kod jako elseTry.py
def fraction_of_one(divisor): value = 1/divisor # if divisor is zero, ZeroDivisionError will be raised return value if __name__ == '__main__': while True: try: # Get input from the user. # if input is not a valid argument for int(), ValueError will be raised divisor = int(input('Enter a divisor: ')) # call our function to compute the fraction value = fraction_of_one(divisor) except (ValueError, ZeroDivisionError): print('Input can't be zero and should be a valid literal for int(). Please, try again!') else: print('Value: ', value) break
Otrzymujemy dane wejściowe od użytkownika i używamy ich do dzielenia 1. Mamy tutaj dwa możliwe wyjątki, nieprawidłowy wpis użytkownika, który spowoduje ValueError i a zero (0) co spowoduje ZeroDivisionError . Nasze oświadczenie z wyjątkiem obsługuje te błędy.
Teraz chcemy wydrukować wartość wartość . Nasz blok else zapewnia, że zostanie on wypisany tylko wtedy, gdy nasz blok try zostanie wykonany bez błędu. Jest to ważne, ponieważ jeśli wystąpi błąd w naszym bloku try, plik wartość będzie niezdefiniowana. Zatem uzyskanie do niego dostępu spowoduje kolejny błąd.
Uruchom powyższy kod za pomocą Python elseTry.py
Powyższe dane wyjściowe pokazują, że dla pierwszego wejścia wpisaliśmy 0 i naciśnij ENTER. Ponieważ nasz dzielnik otrzymał 0, 1 / dzielnik został podniesiony zeroDivisionError . Nasze drugie dane wejściowe to k, które jest nieprawidłowe dla int (), stąd wyjątek ValueError jest podniesiony.
Ale naszym ostatnim wprowadzeniem było 9, co jest poprawne, w wyniku czego otrzymaliśmy wartość „ wartość ”Wydrukowane jako 0.11111111111111
Wypróbuj wreszcie instrukcję
To także jest plik funkcja opcjonalna obsługi wyjątków i zawsze będzie działać bez względu na to, co dzieje się w programach obsługi wyjątków.
To jest:
- Czy wystąpił wyjątek
- Nawet jeśli w innych blokach wywoływana jest funkcja „return”.
- Nawet jeśli skrypt zostanie zamknięty w innych blokach
Więc jeśli mamy kod, który chcemy uruchamiać we wszystkich sytuacjach, ostatecznie-block jest naszym facetem. Ten blok jest używany głównie do porządków, takich jak zamykanie plików.
Rozważmy przykładowy kod w Pythonie poniżej
def readFile(file_path): try: openFile = open(file_path,'r') # Open a file as read-only print(openFile.readline()) # Read first line of file content except FileNotFoundError as ex: print(ex) finally: print('Cleaning...') openFile.close() if __name__ == '__main__': filePath = './text.txt' readFile(filePath)
Ten kod próbuje otworzyć i odczytać plik text.txt w jego bieżącym katalogu. Jeśli plik istnieje, nasz program wydrukuje pierwszą linię pliku, a następnie uruchomi się nasz last-block i zamknie plik.
Powiedzmy, że mamy plik o nazwie text.txt w katalogu, w którym znajduje się ten plik programu i zawiera Hello. Jeśli uruchomimy program, uzyskamy wynik
Ten przykład został wybrany celowo, ponieważ chciałem, abyśmy rozwiązali mały problem, który może wystąpić podczas zamykania plików w bloku final-block.
Jeśli plik nie istnieje, wyjątek FileNotFoundError zostanie podniesiona, a zmienna Otwórz plik nie zostanie zdefiniowany i nie będzie obiektem pliku. Dlatego próba zamknięcia go w bloku final-block spowoduje zgłoszenie wyjątku UnboundLocalError który jest podklasą NameError .
To w zasadzie mówi, że próbujemy odwołać się do zmiennej Otwórz plik zanim został przypisany.
Mała sztuczka polega na tym, aby użyć programów obsługi wyjątków wewnątrz bloku last-block.
def readFile(file_path): try: openFile = open(file_path,'r') # Open a file as read-only print(openFile.readline()) # Read first line of file content except FileNotFoundError as ex: print(ex) finally: try: print('Cleaning...') openFile.close() except: # catches all exceptions pass # Ignore this error because we don't care. if __name__ == '__main__': filePath = './text.txt' readFile(filePath)
Jeśli nasz blok try wywoła FileNotFoundError, otrzymamy następujący wynik
Zgłoś wyjątek
Jedną dobrą wiadomością dotyczącą wyjątków w Pythonie jest to, że możemy je celowo zgłaszać. Wyjątki są zgłaszane za pomocą podnieść oświadczenie .
Instrukcja podniesienia ma następującą składnię:
raise [ExceptionName[(*args: Object)]]
Otwórz terminal i podnieś dowolny obiekt wyjątku z pliku Wyjątki wbudowane w Python. Na przykład, jeśli podniesiemy ZeroDivisionError:
>>> raise ZeroDivisionError('Can't divide by zero')
Otrzymamy dane śledzenia:
Dlaczego więc zgłaszanie wyjątków jest ważne?
- Podczas pracy z niestandardowymi wyjątkami.
- Podczas kontroli poczytalności.
Niestandardowe klasy wyjątków
Wyjątek niestandardowy to taki, który tworzysz w celu obsługi błędów specyficznych dla Twoich potrzeb. Sztuczka polega na tym, że definiujemy klasę wywodzącą się z obiektu Wyjątek , następnie używamy instrukcji raise, aby podnieść naszą klasę wyjątków.
Załóżmy, że chcemy sprawdzić dane wejściowe użytkownika i upewnić się, że wartość wejściowa nie jest ujemna (kontrola poprawności). Oczywiście moglibyśmy podnieść wyjątek Pythona ValueError, ale chcielibyśmy dostosować błąd, nadając mu konkretną i oczywistą nazwę, taką jak InputIsNegativeError . Ale ten wyjątek nie jest wyjątkiem wbudowanym w Python.
Więc najpierw tworzymy naszą klasę bazową, która będzie pochodną Exception.
class CustomError(Exception): 'Base class exception for all exceptions of this module' pass
Następnie tworzymy naszą klasę wyjątków, która odziedziczy klasę bazową i obsłuży nasz określony błąd.
class InputIsNegativeError(CustomError): '''Raised when User enters a negative value''' pass
Przetestujmy to
try: value = int(input()) if value <0: raise InputIsNegativeError # Raise exception if value is negative except InputIsNegativeError: # catch and handle exception print('Input value shouldn't be negative')
Powyższy kod żąda wprowadzenia danych przez użytkownika i sprawdź, czy jest ujemny. Jeśli prawda, zgłasza nasz niestandardowy wyjątek InputIsNegativeError, który jest później przechwytywany w instrukcji except.
Poniżej znajduje się pełny kod:
class CustomError(Exception): 'Base class exception for all exceptions of this module' pass class InputIsNegativeError(CustomError): '''Raised when User enters a negative value''' pass if __name__ == '__main__': try: value = int(input('Input a number: ')) if value <0: raise InputIsNegativeError # Raise exception if value is negative except InputIsNegativeError: # catch and handle exception print('Input value shouldn't be negative')
Jeśli wartość wejściowa jest liczbą ujemną, taką jak -1, otrzymamy wynik:
Sprawdź Doc w Pythonie aby uzyskać więcej informacji na temat wyjątków niestandardowych w Pythonie.
Często Zadawane Pytania
Pytanie 1) Jak Python obsługuje wyjątek?
Odpowiedź: Python obsługuje wyjątki przy użyciu instrukcja try-except . Kod, który może zgłosić wyjątek, jest umieszczany i wykonywany w spróbuj zablokować podczas, gdy z wyjątkiem bloku przechowuje kod, który będzie obsługiwał wyjątki, jeśli takie wystąpią.
Pytanie 2) Co wywołuje wyjątek w Pythonie?
Odpowiedź: Za każdym razem, gdy interpreter Pythona napotyka nieprawidłowy kod, zgłasza wyjątek, który jest własnym sposobem Pythona, aby powiedzieć nam, że wydarzyło się coś nieoczekiwanego. Możemy również celowo wywoływać wyjątki przy użyciu rozszerzenia podnieść oświadczenie .
Pytanie 3) W jaki sposób Python obsługuje wiele wyjątków?
Odpowiedź: Python obsługuje wiele wyjątków, używając pojedynczego bloku oprócz lub wielu bloków oprócz.
W przypadku pojedynczego bloku wyjątki są przekazywane jako krotka: z wyjątkiem (Exception1, Exception2, .., ExceptionN) i Python sprawdza dopasowanie od prawej do lewej. W takim przypadku ta sama akcja jest wykonywana dla każdego wyjątku.
Innym sposobem na przechwycenie wszystkich wyjątków jest pominięcie nazwy wyjątku po słowie kluczowym except.
wznowienie testowania oprogramowania na 1 rok doświadczenia
except: # handle all exceptions here
Drugim sposobem jest użycie bloku except dla każdego wyjątku:
except Exception1: # code to handle Exception1 goes here except Exception2: # code to handle Exception2 goes here except ExceptionN: # code to handle ExceptionN goes here
W ten sposób możesz wykonać osobne akcje dla każdego wyjątku.
P # 4) Dlaczego obsługa wyjątków jest ważna w Pythonie?
Odpowiedź: Zaletą obsługi wyjątków w Pythonie jest to, że możemy tworzyć solidne, czyste i wolne od błędów aplikacje. Nie chcemy, aby nasz kod produkcyjny ulegał awarii z powodu pewnych błędów, więc zajmujemy się błędami i utrzymujemy naszą aplikację w ciągłym ruchu.
Pytanie 5) Jak zignorować wyjątek w Pythonie?
Odpowiedź: Aby zignorować wyjątek w Pythonie, użyj przechodzić słowo kluczowe w bloku oprócz. Powiedzmy, że chcemy zignorować wyjątek ValueError. Zrobimy to w ten sposób:
except ValueError: pass
Jeśli nie wiesz, co robisz, ignorowanie wyjątków jest złą praktyką. Przynajmniej poinformuj użytkownika o wszystkich potencjalnych błędach.
Wniosek
W tym samouczku omówiliśmy: Wyjątki Pythona, Traceback; jak obsługiwać wyjątki z Próbować / Z wyjątkiem / Jeszcze / Wreszcie bloki, jak to zrobić Podnieść Wyjątki i wreszcie, jak tworzyć własne wyjątki niestandardowe.
Dziękuje za przeczytanie!
=> Odwiedź tutaj, aby nauczyć się Pythona od podstaw.
rekomendowane lektury
- Samouczek Pythona dla początkujących (praktyczne BEZPŁATNE szkolenie Python)
- Instrukcje sterujące w języku Python (Python Continue, Break and Pass)
- Python DateTime Tutorial z przykładami
- Funkcje łańcuchowe w Pythonie
- Zmienne Pythona
- C # samouczek obsługi wyjątków z przykładami kodu
- Kompletny przewodnik po obsłudze wyjątków PL SQL z przykładami
- Wyjątki Java i obsługa wyjątków z przykładami