2013-06-18 13 views
8

Próbuję debugować błąd, dostałem "bez wyjątku dostarczony", gdy uruchomiłem go początkowo, a następnie umieścić w próbie/except bloku, aby wydrukować, niezależnie od błędu.pusty komunikat o błędzie w pythonie

try: 
    #some code 
except BaseException, e: 
    print str(e) 

To daje pustą linię wyjściową, wszelkie pomysły, jakie może być?

EDYCJA: Przepraszam, miałem nadzieję, że istnieje szczególny powód, dla którego komunikat o błędzie może być pusty. Nie ma wyjścia śledzenia stosu, co spowodowało, że zmuszono mnie do zrobienia bloku try/except (poza blokiem), wciąż programuję to, więc teraz pozwalam "kompilatorowi" złapać błędy na razie. Rzeczywisty kod, który rzuca błąd, znajduje się w aplikacji Django, więc będzie miał pewne funkcje od Django.

try: 
    if len(request.POST['dateToRun']) <= 0: 
     dateToRun = Job.objects.filter(id=jobIDs[i]).values()['whenToRun'].split(' ')[0] 
    if len(request.POST['timeToRun']) <= 0: 
     timeToRun = Job.objects.filter(id=jobIDs[i]).values()['whenToRun'].split(' ')[1] 
except BaseException, e: 
    print str(e) 

To jest kod w funkcji widoku. jobIDs to dykt zawierający pary kluczy wartości w formacie ## Selection: ## (tj. 17Selection: 17). Przepraszam, że zapomniałem to opublikować na początku.

EDYCJA: repr (e) dał mi TypeError(), który jest lepszy niż nic nie wiedząc.

+1

Być może pomożemy Ci lepiej, jeśli podasz nam dane wyjściowe śledzenia stosu i rzeczywisty kod. –

Odpowiedz

4

Poniższa produkuje czystą linię wyjścia:

try: 
    raise Exception() 
except BaseException, e: 
    print str(e) 

Zastosowanie repr(e), aby zobaczyć co jest wyjątek, który został podniesiony.

9

Oznacza to, że wyjątek nie zawiera żadnej wiadomości. Drukuj wyjątek typ:

print repr(e) 

Można też wydrukować traceback:

import traceback 

# ... 
except BaseException as e: 
    traceback.print_exc() 

chcesz unikać łapania BaseException jednak nie jest to lepsze niż koc except: oświadczeniu. Zamiast tego złap więcej bardziej szczegółowych wyjątków.

1

Umieść blok try/except obok mniejszych sekcji kodu, dopóki nie znajdziesz linii naruszającej prawa. Na przykład, jeśli masz:

try: 
    a = fn(b) 
    c = fn(a) 
except BaseException, e: 
    print str(e) 

Następnie zmień ją na:

a = fn(b) 
try: 
    c = fn(a) 
except BaseException, e: 
    print str(e) 
4

Spróbuj użyć:

try: 
    #code 
except BaseExeption as e: 
    print str(e) 

To wydaje się być najłatwiejszy do zrozumienia i afektywne.

Powiązane problemy