• 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

VPS Starter Arubacloud
0 głosów
91 wizyt
pytanie zadane 19 marca w Python przez tubylec01 Obywatel (1,500 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 (349,420 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,500 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 (349,420 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,500 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 248 wizyt
pytanie zadane 2 listopada 2020 w C# przez XavRock Obywatel (1,390 p.)
0 głosów
1 odpowiedź 198 wizyt
pytanie zadane 3 stycznia 2020 w C# przez dawid2002 Mądrala (5,190 p.)
0 głosów
1 odpowiedź 304 wizyt
pytanie zadane 6 września 2018 w PHP przez BetBet Użytkownik (550 p.)

93,008 zapytań

141,975 odpowiedzi

321,256 komentarzy

62,350 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

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...