在程式設計中,經常需要處理出現的錯誤,比如說程式設計**現的異常,網路超時等等,有的錯誤是可以估計到的,比如說 0 / 1 肯定是錯誤的除法,一些是估計不到的。 但是不能因為有錯誤,整個程式就停止了,程式的魯棒性就體現在面對錯誤,能夠處理錯誤
try:
pass
except exception as e:
print(e)
上面的程式會把導致程式出錯的原因,一句話描述出來,這樣有時候不免顯得不夠清晰,我們可以使用下面的**,顯示出錯的堆疊
try:
s = 0 / 1
except exception as e:
print(traceback.from_exec())
python的所有內建的異常,全部繼承於baseexception 這個類,官方文件看到,自建異常物件推薦是建立乙個error 類, error 類繼承 exception 類,然後具體的異常物件在繼承這個error 類
class error(exception):
pass
class inputerror(error):
def __init__(self,message):
self.message = message
def __str__(self):
return self.message
def test_exception():
i = 1
if i == 1:
raise inputerror("the number can't equal to 1")
try:
test_exception()
except inputerror as e:
print(e)
知道了異常和如何處理異常,在除錯的過程中是十分方便的,但是如果程式已經上線了,那個時候出了問題,要調查就需要借助於log 這個東西了。
一般來說,會在程式中建立乙個logger 類,用來專門的 log 處理。 可以定義好乙個適合自己的 logger 類,需要的時候,直接拿來用即可.
# coding:utf-8
import logging,os
import logging.handlers
import ctypes
# 渲染
foreground_white = 0x0007
foreground_blue = 0x01 # text color contains blue.
foreground_green= 0x02 # text color contains green.
foreground_red = 0x04 # text color contains red.
foreground_yellow = foreground_red | foreground_green
# cmd
std_output_handle= -11
std_out_handle = ctypes.windll.kernel32.getstdhandle(std_output_handle)
def set_color(color, handle=std_out_handle):
bool = ctypes.windll.kernel32.setconsoletextattribute(handle, color)
return bool
class logger(object):
def __init__(self,name,path,clevel=logging.debug,flevel=logging.debug):
self.logger = logging.getlogger(name)
# 這個必須設定,否則預設不顯示debug或者info的資訊,也就是說這個的配置會覆蓋掉cmd和file的配置
self.logger.setlevel(logging.debug)
# 設定格式化
_fmt = logging.formatter('[%(asctime)s] [%(levelname)s] %(name)s : %(message)s', '%y-%m-%d %h:%m:%s')
# 設定命令列
sh = logging.streamhandler()
sh.setformatter(_fmt)
sh.setlevel(clevel)
# 設定檔案log
fh = logging.handlers.rotatingfilehandler(
path,
maxbytes=10240000,
backupcount=5,
encoding='utf-8'
)fh.setformatter(_fmt)
fh.setlevel(flevel)
# 新增處理器
self.logger.addhandler(sh)
self.logger.addhandler(fh)
def debug(self,msg):
self.logger.debug(msg)
def info(self,msg):
self.logger.info(msg)
def warn(self,msg,color=foreground_yellow):
set_color(color)
self.logger.warn(msg)
set_color(foreground_white)
def error(self,msg,color=foreground_red):
set_color(color)
self.logger.error(msg)
set_color(foreground_white)
def critlal(self,msg):
self.logger.critical(msg)
if __name__ =='__main__':
logyyx = logger(__name__,'logs/test2.log',)
logyyx.debug('乙個debug資訊')
logyyx.info('乙個info資訊')
logyyx.warn('乙個warning資訊')
logyyx.error('乙個error資訊')
logyyx.critlal('乙個致命critical資訊')
MySql錯誤處理 錯誤處理的例子
有幾種錯誤處理的宣告形式 如果任何錯誤 不是 not found 設定 l error 為 1 後繼續執行 declare continue handler for sqlexception set l error 1 如果發生任何錯誤 不是 not found 執行 rollback和產生一條錯誤...
MySql錯誤處理(三) 錯誤處理的例子
mysql錯誤處理 三 錯誤處理的例子 有幾種錯誤處理的宣告形式 如果任何錯誤 不是 not found 設定 l error 為 1 後繼續執行 declare continue handler for sqlexception set l error 1 如果發生任何錯誤 不是 not foun...
PHP 錯誤處理
在 php 中,預設的錯誤處理很簡單。一條訊息會被傳送到瀏覽器,這條訊息帶有檔名 行號以及一條描述錯誤的訊息。在建立指令碼和 web 應用程式時,錯誤處理是乙個重要的部分。如果您的 缺少錯誤檢測編碼,那麼程式看上去很不專業,也為安全風險敞開了大門。本教程介紹了 php 中一些最為重要的錯誤檢測方法。...