Python如何輸出異常信息(行號)
Python輸出異常信息
如下:
import traceback try: except Exception, e: print sys._getframe().f_lineno, 'str(e):\t\t', str(e) print sys._getframe().f_lineno, 'repr(e):\t', repr(e) print sys._getframe().f_lineno, 'e.message:\t', e.message print sys._getframe().f_lineno, 'traceback.print_exc():'; traceback.print_exc() print sys._getframe().f_lineno, 'traceback.format_exc():\n%s' % traceback.format_exc() # 關(guān)鍵是這一句 traceback.print_exc()
python代碼測試中輸出錯誤信息
python輸出錯誤信息的方法
1、try -except + raise
?最為常見的捕捉錯誤信息形式,其中有try - except, try - except-finally, raise格式
(1)try-except:
語句用來檢測try語句塊中的錯誤,從而讓except語句捕獲異常信息并處理,如果你不想在異常發(fā)生時結(jié)束你的程序,只需在try里捕獲它。
try: self.cursor.execute(select_plan_info_sql, params) for x in self.cursor.fetchall(): plan.append({ }) except DatabaseError as ex: app_log.error("database error: %s, sql: %s, traceback: %s", ex, self.cursor.statement, traceback.format_exc())
(2)try-finally + try-except-finally:
finally 語句無論是否發(fā)生異常都將執(zhí)行最后的代碼。
try: f1 = open("test.txt","rU") for i in f1: i=i.strip() print(i) except Exception as E_results: print("捕捉有異常:",E_results) finally: #finally的代碼是肯定執(zhí)行的,不管是否有異常,但是finally語塊是可選的。 f1.close print("我不管,我肯定要執(zhí)行。")
(3)raise(拋出錯誤)
我們也可以自己定義錯誤類型,遇到自認(rèn)為是錯誤情況時,拋出錯誤實例。用raise語句可以將一個錯誤實例拋出。
# 實例1 def fn(s): n = s if n == 0: raise MyError('invalid value: %s' % s) return 9 / n fn(0) # 實例2 try: self.cursor.execute(select_plan_info_sql, params) for x in self.cursor.fetchall(): plan.append({ }) except DatabaseError as ex: app_log.error("database error: %s, sql: %s, traceback: %s", ex, self.cursor.statement, traceback.format_exc()) raise HTTPError(500)
raise 和 try 的區(qū)別:
- raise語句負(fù)責(zé)拋出錯誤信息,而try語句負(fù)責(zé)檢查是否有錯誤信息并捕獲信息。
- 若沒有try語句,那么錯誤信息就要讓python的解釋器來處理。
raise可以轉(zhuǎn)換錯誤類型:
- raise語句也可以不帶參數(shù),此時按原錯誤信息拋出。
- 此外,在except中raise一個Error,還可以把一種類型的錯誤轉(zhuǎn)化成另一種類型
try: 10 / 0 except ZeroDivisionError: raise ValueError('input error!')
2、self參數(shù)
在Python類中規(guī)定,函數(shù)的第一個參數(shù)是實例對象本身,并且約定俗成,把其名字寫為self。其作用相當(dāng)于java中的this,表示當(dāng)前類的對象,可以調(diào)用當(dāng)前類中的屬性和方法。
self中存在一個self.fail方法,即當(dāng)輸入的情況不符合時,將會使用self.fail(message=u"message")
注:u是unicode格式,表示有中文字符時候?qū)⒆詣愚D(zhuǎn)換成中文,否則將以unicode形式輸出
def put(self): app_id = self.get_argument("app_id").strip() if not app_id: self.fail(message="Invalid app_id") self.cache.sadd(settings.ALLOWED_APPS_KEY, app_id) self.success()
3、return tuple
? 當(dāng)在測試中有多個情況多個值,并且在另一個方法中調(diào)用這些情況的時候,可以考慮使用這種方法,減少代碼量
def int_cond_judge(temp_para, para, list_num): if list_num is None: list_num = [] if not temp_para: return None, "{} is empty".format(para) if isinstance(temp_para, (unicode, str)) and not temp_para.isdigit(): return None, "{} format is wrong".format(para) temp_para = int(temp_para) if list_num and temp_para not in list_num: return None, "{} is out of range".format(para) return temp_para, None # 上一步中各個情況的return返回值為tuple def return_value(self, temp_para, para, list_num=None): value, msg = int_cond_judge(temp_para, para, list_num) if msg: self.fail(message=msg) return value
4、list里面加入錯誤信息
? (函數(shù)內(nèi)部引用加值)
5、斷言
? 這個方法一般使用在測試中,
self.assertEqual(a, b),如果a和b不相等(輸出為false),則自動拋出異常
# list json_list = requests.get(self.url_list, self.params).json() self.assertEqual(json_list['status'], 0)
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
解決pycharm的Python console不能調(diào)試當(dāng)前程序的問題
今天小編就為大家分享一篇解決pycharm的Python console不能調(diào)試當(dāng)前程序的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01使用Flask開發(fā)RESTful?API的方法實現(xiàn)
RESTful?API是一種基于REST架構(gòu)風(fēng)格設(shè)計的Web服務(wù)接口,本文主要介紹了使用Flask開發(fā)RESTful?API的方法實現(xiàn),具有一定的參考價值,感興趣的可以了解一下2023-11-11python文件操作相關(guān)知識點(diǎn)總結(jié)整理
這篇文章主要介紹了python文件操作相關(guān)知識點(diǎn),整理匯總了Python文件操作所涉及的常見函數(shù)與方法,并給出了實例代碼予以總結(jié)歸納,需要的朋友可以參考下2016-02-02python實現(xiàn)飛機(jī)大戰(zhàn)游戲(pygame版)
這篇文章主要為大家詳細(xì)介紹了python實現(xiàn)pygame版的飛機(jī)大戰(zhàn)游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-02-02詳述numpy中的np.random.random()系列函數(shù)用法
本文主要介紹了詳述numpy中的np.random.random()系列函數(shù)用法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03pytorch的backward()的底層實現(xiàn)邏輯詳解
自動微分是一種計算張量(tensors)的梯度(gradients)的技術(shù),它在深度學(xué)習(xí)中非常有用,這篇文章主要介紹了pytorch的backward()的底層實現(xiàn)邏輯,需要的朋友可以參考下2023-11-11Ubuntu20.04環(huán)境安裝tensorflow2的方法步驟
這篇文章主要介紹了Ubuntu20.04環(huán)境安裝tensorflow2的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01