5 錯誤處理

2021-09-12 22:12:59 字數 3234 閱讀 8529

在程式設計中,經常需要處理出現的錯誤,比如說程式設計**現的異常,網路超時等等,有的錯誤是可以估計到的,比如說 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 中一些最為重要的錯誤檢測方法。...