python调试_Python调试坑
寫python的人一般都不太看重調(diào)試, 因?yàn)檫@是一門解釋性語(yǔ)言, 在哪出錯(cuò)會(huì)立馬在解釋器里提示出來(lái)。但是, 以上觀點(diǎn)只適用于小的腳本或者項(xiàng)目。因?yàn)槲以诮佑|目前項(xiàng)目之前, 我一直都是這么做的。
對(duì)于一個(gè)大的項(xiàng)目來(lái)說(shuō), 調(diào)試就不能這么做了, 這種大項(xiàng)目通常都是多進(jìn)程或者多線程, 普通的調(diào)試基本沒辦法。通常會(huì)通過(guò)記錄日志來(lái)調(diào)試, 記錄日志。。這里就是我想說(shuō)得一個(gè)坑。正常的項(xiàng)目里面都會(huì)有容錯(cuò)處理, 也就是各種try...except, 然后把拋出的異常寫到日志, 出錯(cuò)的時(shí)候就可以通過(guò)看錯(cuò)誤日志去定位信息。 但是, 拋出的異常通常只是一句話, 無(wú)法得到具體的錯(cuò)誤代碼行, 這在一個(gè)模塊比較多的項(xiàng)目里簡(jiǎn)直就是噩夢(mèng), 你可能要花費(fèi)很多時(shí)間去定位錯(cuò)誤所在地方, 效率極其低下。 腫么辦呢, python里面有一個(gè)模塊叫traceback, 這個(gè)模塊是干嘛的呢, 請(qǐng)看官方解釋:This module provides a standard interface to extract, format and print stack traces of Python programs. It exactly mimics the behavior of the Python interpreter when it prints a stack trace. This is useful when you want to print stack traces under program control, such as in a “wrapper” around the interpreter.
也就是說(shuō), 這個(gè)模塊就像一個(gè)縮小版的解釋器一樣, 可以跟蹤代碼運(yùn)行棧。 簡(jiǎn)單來(lái)說(shuō), 可以看到代碼詳細(xì)出錯(cuò)信息, 包括在哪出錯(cuò)。怎么用呢, 就說(shuō)一種用法, 我覺得夠用了:import traceback
try:1/0
except Exception as e:traceback.print_exc(file=open('/tmp/error', 'wb'))
這樣程序在拋出異常后, 就會(huì)將出錯(cuò)信息寫到'/tmp/error'這個(gè)文件中, just enjoy it!
另外要說(shuō)的一種方法是logging模塊中用到的方法。
對(duì)于大型項(xiàng)目而言,用logging模塊調(diào)試是一種更好的方法,日志集中管理。
要使用日志,首先要聲明一個(gè)logger,具體怎么聲明這里不再贅述,參見python官方文檔或者google。
效果和traceback一樣,代碼如下:try:1/0
except Exception as e:logger.exception(e)
總結(jié)
以上是生活随笔為你收集整理的python调试_Python调试坑的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: b树与b+树的区别_面试必考:B树、B树
- 下一篇: python对浏览器的常用操作_sele