电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

python 追蹤except信息方式

瀏覽:15日期:2022-07-27 15:32:02

看下面這個(gè)函數(shù)

def test(): sum = 3/0 if __name__ == ’__main__’: test()

除0肯定是不對(duì)的,會(huì)引發(fā)一個(gè)except,內(nèi)容如下:

File 'E:SrcdongshengTestPythontesttrace_back.py', line 23, in <module>test()File 'E:SrcdongshengTestPythontesttrace_back.py', line 19, in testsum = 3/0ZeroDivisionError: integer division or modulo by zero

上面的提示,是在IDE中運(yùn)行時(shí)出現(xiàn)的,實(shí)際在線上運(yùn)行腳本時(shí),一般會(huì)用nohup 方式啟動(dòng),輸出內(nèi)容會(huì)寫(xiě)入到nohup.out文件中,但這個(gè)文件里的內(nèi)容可能非常多,很雜亂,不利于異常的排查。

python 提供了traceback ,可以完美的輸出except發(fā)生時(shí)的信息,就和上面的內(nèi)容一樣,而且可以輸入到指定的文件之中,所以,不妨寫(xiě)一個(gè)裝飾器,修飾那些需要監(jiān)督的函數(shù),當(dāng)他們發(fā)生異常時(shí),記錄下有關(guān)異常的信息。

#coding=utf-8from functools import wrapsimport traceback def except_trace(filename): def decorate(func): @wraps(func) def wrapper(*args,**kwargs): try: func(*args,**kwargs) except: fp = open(filename,’w’) traceback.print_exc(file=fp) fp.close() return wrapper return decorate@except_trace(’1.txt’)def test(): sum = 3/0 if __name__ == ’__main__’: test()

這一次,發(fā)生異常后,有關(guān)異常的信息會(huì)輸入到1.txt文件中,這個(gè)文件中只包含異常的信息,方便查看。

補(bǔ)充知識(shí):Python 的 except 怪癖

讓我來(lái)展示一下我最喜歡的 Python 怪癖。你希望這段 Python 代碼做什么?

如果你是從另一種編程語(yǔ)言過(guò)來(lái)學(xué)習(xí) Python 的,你可能希望except子句引入嵌套范圍,因此在子句中賦值給 e 不會(huì)影響外部作用域中已有的 e 變量。然而,在 Python 中,控制結(jié)構(gòu)通常不引入嵌套作用域(列表推導(dǎo)是一個(gè)例外),所以如果你有更多的 Python 經(jīng)驗(yàn),你可能會(huì)期望它打印一個(gè)ZeroDivisionError實(shí)例。

實(shí)際上,在標(biāo)準(zhǔn) CPython 實(shí)現(xiàn)中,它什么也不打印;同時(shí),最后一行將引發(fā)一個(gè)NameError。這是一個(gè) bug 嗎?事實(shí)上,這是故意的。如果查看 except 子句生成的字節(jié)碼,可以看到:

當(dāng)控制流退出except塊時(shí),Python 將從作用域中刪除該名稱。為什么?因?yàn)楫惓3钟袑?duì)當(dāng)前棧幀的引用,該棧幀包含作用域內(nèi)的所有內(nèi)容。由于Python主要是通過(guò)引用計(jì)數(shù)來(lái)管理內(nèi)存主體的,這意味著當(dāng)前作用域內(nèi)的任何內(nèi)容都不會(huì)被釋放,直到下一輪垃圾收集運(yùn)行 (如果有的話)。目前的行為是內(nèi)存使用、易于實(shí)現(xiàn)和語(yǔ)言整潔之間的折衷。它有點(diǎn)缺點(diǎn),但我認(rèn)為它體現(xiàn)了我喜歡Python的一點(diǎn):不讓純粹性妨礙實(shí)用性。

但這只解釋了DELETE_NAME指令。為什么 CPython 把e設(shè)為None,即便隨后立即就刪除了這個(gè)變量?好吧,設(shè)想你和 CPython 團(tuán)隊(duì)有相同的想法,并且決定在 except 塊的末尾清理異常引用:

在except塊的末尾,CPython 將嘗試刪除你已經(jīng)刪除的名字e!為了解決這個(gè)問(wèn)題,CPython 在刪除e之前賦值e = None,以確保e存在。

以上這篇python 追蹤except信息方式就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 百方网-百方电气网,电工电气行业专业的B2B电子商务平台 | 安徽净化工程设计_无尘净化车间工程_合肥净化实验室_安徽创世环境科技有限公司 | 【化妆品备案】进口化妆品备案流程-深圳美尚美化妆品有限公司 | 踏板力计,制动仪,非接触多功能速度仪,逆反射系数测试仪-创宇 | 5L旋转蒸发器-20L-50L旋转蒸发器-上海越众仪器设备有限公司 | 不锈钢丸厂家,铝丸,铸钢丸-淄博智源铸造材料有限公司 | SMC-SMC电磁阀-日本SMC气缸-SMC气动元件展示网 | 哈尔滨发电机,黑龙江柴油发电机组-北方星光 | 济南轻型钢结构/济南铁艺护栏/济南铁艺大门-济南燕翔铁艺制品有限公司 | 氧化锆纤维_1800度高温退火炉_1800度高温烧结炉-南京理工宇龙新材料股份有限公司 | 合肥网带炉_安徽箱式炉_钟罩炉-合肥品炙装备科技有限公司 | 深圳市索富通实业有限公司-可燃气体报警器 | 可燃气体探测器 | 气体检测仪 | 钢丝绳探伤仪-钢丝绳检测仪-钢丝绳探伤设备-洛阳泰斯特探伤技术有限公司 | 电镀整流器_微弧氧化电源_高频电解电源_微弧氧化设备厂家_深圳开瑞节能 | 车辆定位管理系统_汽车GPS系统_车载北斗系统 - 朗致物联 | 定硫仪,量热仪,工业分析仪,马弗炉,煤炭化验设备厂家,煤质化验仪器,焦炭化验设备鹤壁大德煤质工业分析仪,氟氯测定仪 | 有机肥设备生产制造厂家,BB掺混肥搅拌机、复合肥设备生产线,有机肥料全部加工设备多少钱,对辊挤压造粒机,有机肥造粒设备 -- 郑州程翔重工机械有限公司 | SRRC认证_电磁兼容_EMC测试整改_FCC认证_SDOC认证-深圳市环测威检测技术有限公司 | 上海皓越真空设备有限公司官网-真空炉-真空热压烧结炉-sps放电等离子烧结炉 | 聚氨酯保温钢管_聚氨酯直埋保温管道_聚氨酯发泡保温管厂家-沧州万荣防腐保温管道有限公司 | 天津货架厂_穿梭车货架_重型仓储货架_阁楼货架定制-天津钢力仓储货架生产厂家_天津钢力智能仓储装备 | 陕西高职单招-陕西高职分类考试网| 电杆荷载挠度测试仪-电杆荷载位移-管桩测试仪-北京绿野创能机电设备有限公司 | 富森高压水枪-柴油驱动-养殖场高压清洗机-山东龙腾环保科技有限公司 | nalgene洗瓶,nalgene量筒,nalgene窄口瓶,nalgene放水口大瓶,浙江省nalgene代理-杭州雷琪实验器材有限公司 | 免费B2B信息推广发布平台 - 推发网| 无硅导热垫片-碳纤维导热垫片-导热相变材料厂家-东莞市盛元新材料科技有限公司 | 台湾阳明固态继电器-奥托尼克斯光电传感器-接近开关-温控器-光纤传感器-编码器一级代理商江苏用之宜电气 | 帽子厂家_帽子工厂_帽子定做_义乌帽厂_帽厂_制帽厂 | 十二星座查询(性格特点分析、星座运势解读) - 玄米星座网 | 南京泽朗生物科技有限公司| 香蕉筛|直线|等厚|弧形|振动筛|香蕉筛厂家-洛阳隆中重工 | 挨踢网-大家的导航!| 工业用品一站式采购平台|南创工品汇-官网|广州南创 | 青州开防盗门锁-配汽车芯片钥匙-保险箱钥匙-吉祥修锁店 | 电动葫芦|防爆钢丝绳电动葫芦|手拉葫芦-保定大力起重葫芦有限公司 | 工业机械三维动画制作 环保设备原理三维演示动画 自动化装配产线三维动画制作公司-南京燃动数字 聚合氯化铝_喷雾聚氯化铝_聚合氯化铝铁厂家_郑州亿升化工有限公司 | 集装袋吨袋生产厂家-噸袋廠傢-塑料编织袋-纸塑复合袋-二手吨袋-太空袋-曹县建烨包装 | 今日娱乐圈——影视剧集_八卦娱乐_明星八卦_最新娱乐八卦新闻 | DNA亲子鉴定_DNA基因检测中心官方预约平台-严选好基因网 | 工业冷却塔维修厂家_方形不锈钢工业凉水塔维修改造方案-广东康明节能空调有限公司 |