Cześć, pytanko bardzo ogólne, jak poprawnie obsługiwać wyjątki, mam taki fragment kodu:
def __init__(self):
self._students_dict = self.get_students_from_json_file()
def get_students_from_json_file(self):
if not os.path.exists(self.STUDENTS_FILENAME):
return {}
try:
w tej metodzie mogą zostać rzucone 2 wyjątki przez zewnętrzne metody, mogę je
złapać
except json.JSONDecodeError:
print("Wrong JSON format in file: {}".format(self.STUDENTS_FILENAME))
return {}
except OSError as e:
print(str(e))
return {}
mamy sobie konstruktor klasy, w tym konstruktorze do zmiennej _students_dict przypisujemy wartość zwróconą przez metodę get_students_from_json_file, w metodzie tej mogą zostać rzucone dwa wyjątki, i teraz mamy dwa wyjścia: złapać te wyjątki wewnątrz metody i na ich podstawie zwrócić jakąś tam wartość funkcji, jak w przykładzie powyżej, czy tam coś wypisać, albo wyjątków tych nie łapać w metodzie, zignorować je i złapać je dopiero w konstruktorze przy wywoływaniu metody, jak poniżej
def __init__(self):
try:
self._students_dict = self.get_students_from_json_file()
except json.JSONDecodeError:
do something
except OSError:
do something
def get_students_from_json_file(self):
if not os.path.exists(self.STUDENTS_FILENAME):
return {}
ewentualnie rzucone wyjątki zignorowane, łapię je w metodzie
wywołującej
myślę że ten 2 sposób jest bardziej "naturalny" bo funkcja powinna jedynie zwracać wartość, a nie zajmować się obsługą wyjątków, a jak to robić według was? Możecie polecić jakiś kompleksowy poradnik o poprawnej obsłudze wyjątków i zawierający jakieś konkretne dłuższe przykłady a nie 5 linijek na krzyż jak wszędzie w internecie?