• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Obsługa wyjątków + logger - Python

Object Storage Arubacloud
0 głosów
54 wizyt
pytanie zadane 19 marca w Python przez tubylec01 Obywatel (1,290 p.)

Hej!
Walczę z logowaniem zdarzeń, próbowałem różnych opcji ale zostałem na podstawowej:

logger = logging.getLogger(__name__)
logging.basicConfig(filename='error.log', filemode='w', format='%(asctime)s %(filename)s %(funcName)s %(message)s',
                    datefmt='%m/%d/%Y %I:%M %p', encoding='utf-8', level=logging.DEBUG)


Fragment przykładowego kodu:

def funkcja_jeden():
    if 0 == funkcja_dwa():
        print('OK')
        
def funkcja_dwa():
    try:
        # jakaś runkcja
        return 0
    except Exception as e:
        logger.error(e)
        return 1

 

Jak w tym przykładzie uzyskać efekt taki, że w przypadku wyjątku (funkcja_dwa), wykona się logowanie "logger.error()" oraz funkcja zwróci "1"  (do funkcja_jeden) a program będzie dalej działać normalnie.

komentarz 19 marca przez adrian17 Ekspert (344,860 p.)
Chyba nie rozumiem o co pytasz. Co Ci nie pasuje w tym, co masz teraz napisane? Bo brzmi jak to co chcesz.

BTW1, jest też coś takiego jak logger.exception().

BTW2, nie wiem czemu zwracasz 0/1 jako sukces/porażka jeśli... no, do tego są wyjątki :P
komentarz 19 marca przez tubylec01 Obywatel (1,290 p.)
def funkcja_jeden():
    x = funkcja_dwa()
    if x == 0:
        print_to_GUI('OK')
    else:
        print_to_GUI('NOK')
    funkcja_trzy()
        
def funkcja_dwa():
    try:
        if 0 == funkcja_cztery():
            return 0
        else:
            return 1
    except Exception as e:
        logger.error(e)
        return 1

Trochę może lepsze zobrazowanie, chcę aby "funkcja_dwa" w razie wyjątku logowała ten wyjątek oraz zwróciła wartość do zmiennej x , tak aby dalsza część programu mogła się wykonać, obecnie do x nic nie jest przypisane i nie realizuje się dalsza część funkcji "funkcja_jeden". Wystarczy, że dam w komentarz "logger.error(e)" i wszystko działa tak jak chcę, co jest zrozumiałe dla mnie. Nie wiem jak okiełznać te logowania...
 

1
komentarz 19 marca przez adrian17 Ekspert (344,860 p.)
edycja 19 marca przez adrian17

Uhh... nie rozumiem. U mnie ten kod ładnie działa. Może dasz prawdziwy pełny przykład tego co faktycznie robisz?

To co u mnie działa, bezpośrednio odpalony skrypt:

import logging
logging.basicConfig(filename='error.log')

def funkcja_jeden():
    x = funkcja_dwa()
    if x == 0:
        print("GUI OK")
    else:
        print("GUI ERR")
    print("koniec")

def funkcja_dwa():
    try:
        1/0 # rzuca wyjatek
        return 0
    except Exception as e:
        logging.error(e)
        return 1

funkcja_jeden()

No i jak wyżej, wciąż nie rozumiem czemu się bawisz z 1/0 zamiast używać dalej wyjątków, tzn:

try:
    funkcja_dwa()
    print_to_GUI('OK')
except:
    print_to_GUI('NOK')

 

komentarz 19 marca przez tubylec01 Obywatel (1,290 p.)
Dziękuję za przetestowanie u siebie! Już wiem, że powinno to działać jak zakładałem, teraz muszę jeszcze poszukać gdzieś robaka, wysłać prawdziwy przykład jest rozbudowany i może być ciężko, bo to kilka plików po kilkaset, kilkadziesiąt linii.

Dlaczego bawię się w 1/0, bo jest nadrzędna funkcja, która sprawdza, co zostało zwrócone z wywołanej funkcji (ona może wywołać kilka kolejnych) ale liczy się ostateczna zwrotka i jeśli jest błąd to próbuje ponownie wykonać zadanie prze pewien określony czas. Może można było by to zrobić bez 1/0 ale osobiście "widzę" wszystko bardziej jak mam zwrotkę 1/0.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

+1 głos
0 odpowiedzi 219 wizyt
pytanie zadane 2 listopada 2020 w C# przez XavRock Obywatel (1,390 p.)
0 głosów
1 odpowiedź 183 wizyt
pytanie zadane 3 stycznia 2020 w C# przez dawid2002 Mądrala (5,190 p.)
0 głosów
1 odpowiedź 237 wizyt
pytanie zadane 6 września 2018 w PHP przez BetBet Użytkownik (550 p.)

92,579 zapytań

141,432 odpowiedzi

319,657 komentarzy

61,963 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...