2013-06-18 45 views
8

我試圖調試一個錯誤,當我最初運行它時,我得到了一個「沒有例外」,然後在try/except塊中輸出任何錯誤。python中的空錯誤消息

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

這產生了一個空行輸出,任何想法它可能是什麼?

編輯:對不起,希望有一個具體的原因,錯誤信息可能是空白的。沒有任何堆棧跟蹤輸出,這是導致我被迫嘗試/除了塊的第一位,我仍然編程這個東西,所以我只是讓'編譯器'趕上現在的錯誤。引發錯誤的實際代碼是在Django應用程序中,因此它將具有來自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) 

這是視圖函數中的代碼。 jobIDs是一個包含格式爲## Selection:##(即17Selection:17)的值密鑰對的字典。對不起,我忘了發佈這個最初。編輯:repr(e)給了我TypeError(),這比不知道任何東西更好。

+1

也許我們可以幫助你更好的,如果你給我們堆棧跟蹤輸出和實際的代碼。 –

回答

4

下產生輸出的空行:

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

使用repr(e)看到異常是什麼,有人提出。

9

這意味着該例外沒有附加信息。打印異常類型

print repr(e) 

您可能還需要打印的回溯:

import traceback 

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

你想避免醒目BaseException然而,這只不過是一個毯子except:陳述更好。取而代之的是更具體的例外。

1

將try/except塊放在代碼的較小部分中,直到找到違規行。例如,如果您有:

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

然後將其更改爲:

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

嘗試使用:

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

這似乎是最容易理解和情感。