Cześć,
Nie mam doświadczenia w konstrukcji dużych aplikacji i chciałbym się was poradzić, jak postępować z obsługą błędów. Wolę tego typu informacje uzyskiwać na przykładach, zatem podam fragmenty kodu przy których mam mega wątpliwości.
Funkcja load_keymap jest z modułu keymap, a jej treść jest następująca:
def load_keymap():
"""Funkcja wczytujaca odwzorowanie skrotow klawiszowych na instrukcje."""
keymap = {}
for line in all_lines( mapping.config( 'keymap' ) ):
try:
shortcut, statement = split_strip( '=', line )
keymap[ shortcut ] = statement
except ValueError:
raise ValueError( 'Błędny wpis w konfiguracji klawiszy: %s' % ( line ) )
return keymap
Moduł window zawiera klasę Window, która ma metodę init_keymap, jej treść jest następująca:
def init_keymap( self ):
"""Inicjalizacja słownika skrotow klawiszowych na instrukcje."""
try:
self.keymap = load_keymap()
except Exception as e:
raport_error( str( e ) )
sys.exit()
Zaraz po skojarzeniu pliku konfiguracji dochodzi do odczytu wszystkich linii. Jeśli plik będzie przypadkowo usunięty to python wywali exception o treści "No such file or directory ..." i tak zastawia mnie to co w tej sytuacji byłby lepsze. Czy samodzielna próba reanimacji danej sytuacji, czyli utworzenie niezbędnych katalogów, plików po to by później nic nie wczytać (A jeśli tak, to w którym pliku powinno to się odbywać?). Czy może sam proces wczytania wszystkich linii otoczyć klauzulą try..except i później wypuść wyjątek o treści przeznaczonej dla usera końcowego, np. "Utwórz plik 'filename' i uzupełnij plik ręcznie o swoje konfiguracje klawiszowe"?
Zastanawia mnie też czy kod gdzie mam except ValueError i raise ValueError jest karygodny. W końcu pewne błędy chciałbym userowi uświadomić zamiast chować to do logu. Czy takie tłumaczenie błędu technicznego na zrozumiały jest powszechna praktyka? A jeśli nie to jak wy to robicie?
Na razie chciałbym z wami porozmawiać na temat powyższego kodu, jeśli rozmowa będzie miała sens to skuszę się przedstawić kolejne fragmenty nad którymi się głowię.
Dzięki za uwagę. Liczę na powagę z waszej strony.