2012-10-31 48 views
0

我已經在python中編寫了一個腳本,除了處理所有運行時異常的處理(catch塊)之外。如果我將try塊放入與腳本相同的文件中,那麼它會打印異常,但是我的需要的是如果try塊位於不同的文件中,那麼它將使用腳本中寫入的catch塊的過程是什麼。在python中用於異常處理的庫文件

import traceback 
import sys 
import linecache 


try: 
    # execfile(rahul2.py) 

    def first(): 
     second() 

    def second(): 
     i=1/0; 


    def main(): 
     first() 

    if __name__ == "__main__": 
     main()  

except SyntaxError as e: 
    exc_type, exc_value, exc_traceback = sys.exc_info() 
    filename = exc_traceback.tb_frame.f_code.co_filename 
    lineno = exc_traceback.tb_lineno 
    line = linecache.getline(filename, lineno) 
    print("exception occurred at %s:%d: %s" % (filename, lineno, line)) 
    print("**************************************************** ERROR ************************************************************************") 
    print("You have encountered an error !! no worries ,lets try figuring it out together") 
    print(" It looks like there is a syntax error in the statement:" , formatted_lines[2], " at line number " , exc_traceback.tb_lineno) 
    print("Make sure you look up the syntax , this may happen because ") 
    print(" Remember this is the error message always thrown " "'" ,e , "'") 

同樣我有其他異常書面...

現在我的問題是假設我想使用這個腳本的所有節目或喜歡假設try塊在不同的文件...那麼我怎麼可以鏈接我的腳本和程序已經嘗試塊..

或者如果我把它放在不同的單詞那麼我想要的是每當有一個try catch塊,然後catch塊應按照我的腳本執行而不是內置的庫。

+0

我們可以看到你的代碼嗎? – 2012-10-31 07:26:59

+0

@shikhapanghal:編輯你的問題並將代碼放在那裏 – avasal

+0

編輯問題 –

回答

1

如果要在調用此腳本的腳本中處理此異常,則需要引發異常。例如:

except SyntaxError as e: 
     exc_type, exc_value, exc_traceback = sys.exc_info() 
     filename = exc_traceback.tb_frame.f_code.co_filename 
     lineno = exc_traceback.tb_lineno 
     line = linecache.getline(filename, lineno) 
     print("exception occurred at %s:%d: %s" % (filename, lineno, line)) 
     print("**************************************************** ERROR ************************************************************************") 
     print("You have encountered an error !! no worries ,lets try figuring it out together") 
     print(" It looks like there is a syntax error in the statement:" , formatted_lines[2], " at line number " , exc_traceback.tb_lineno) 
     print("Make sure you look up the syntax , this may happen because ") 
     print(" Remember this is the error message always thrown " "'" ,e , "'") 
     #### Raise up the exception for handling in a calling script #### 
     raise e 

然後在你調用腳本你只要把另一個try-except塊(假設「庫文件」你寫的叫mymodule.py和這兩個文件位於同一工作目錄),像這樣

try: 
    import mymodule 
    mymodule.main() 
except SyntaxError as e: 
    print("Exception found") # Optional: Add code to handle the exception 

請記住,如果您無法處理此重新引發的異常,它將導致腳本失敗並退出(打印異常消息和堆棧跟蹤)。 這是一件好事。遇到致命錯誤的腳本如果恢復方法未知或無法以編程方式處理,應以的失敗方式引起用戶注意。

+0

感謝你的答覆..它相當詳盡,但我得到的地方,你提出異常的地方####引發在調用腳本中處理的異常#### .. dnt獲取此目的/ –

+0

如果調用者有錯誤,您無法在被調用者中處理它們。異常從被調用者傳遞到調用者,反之亦然,因此被調用者腳本將不知道發生了異常。 – 2012-10-31 08:00:16

+0

感謝你的答覆..它相當詳盡,但我得到的地方,你提出異常的地方####提高異常處理在一個調用腳本#### .. dnt得到這個/ –