python處理異常 日誌以及正規表示式

2021-08-22 16:33:14 字數 2305 閱讀 3886

異常捕獲

高階語言通常都內建了一套try…except…finally…的錯誤處理機制,python也不例外。而且只要在合適的層次去捕獲錯誤就可以了。

def

foo(s):

return

10 / int(s)

defbar

(s):

return foo(s) * 2

defmain

():try:

bar('0')

except exception as e:

print('error:', e)

finally:

print('finally...')

一般可以選擇python內建的錯誤型別(比如valueerror,typeerror),只有在必要的時候才定義我們自己的錯誤型別。捕獲了異常,列印乙個valueerror!後,再把錯誤通過raise語句丟擲去,這種處理方式相當常見,由於當前函式不知道應該怎麼處理該錯誤,所以,最恰當的方式是繼續往上拋,讓頂層呼叫者去處理。

raise語句如果不帶引數,就會把當前錯誤原樣丟擲。如果在except中raise乙個error,就可以把一種型別的錯誤轉化成另一種型別:

def

foo(s):

n = int(s)

if n==0:

raise valueerror('invalid value: %s' % s)

return

10 / n

defbar

():try:

foo('0')

except valueerror as e:

print('valueerror!')

raise

bar()

日誌處理

logging的好處:它允許你指定記錄資訊的級別,而且一條語句可以同時輸出到不同的地方,比如console和檔案。

import logging

logging.basicconfig(level=logging.info)

s = '0'

n = int(s)

logging.info('n = %d' % n)

print

(10 / n)

正規表示式

1、常用表示式定義:

\d可以匹配乙個數字

\w可以匹配乙個字母或數字

\s可以匹配乙個空格(也包括tab等空白符)

*表示任意個字元(包括0個)

+表示至少乙個字元

?表示0個或1個字元

表示n個字元

表示n-m個字元

.可以匹配任意字元

^表示行的開頭,^\d表示必須以數字開頭。

$表示行的結束,\d$表示必須以數字結束。

2、特殊字元

若要匹配特殊字元,必須首先使字元」轉義」,即,將反斜槓字元\ 放在它們前面。特殊字元包括$,{},(),,*,+,.,^,|,\,?

3、re模組

python提供re模組,包含所有正規表示式的功能。強烈建議使用python的r字首,就不用考慮轉義的問題了:

s = r'this is\-test'

# python的字串

import re

re.match(r'^\d\-\d$', '010-12345')

常見的判斷方法就是:

test = '使用者輸入的字串'

if re.match(r'正規表示式', test):

print('ok')

else:

print('failed')

4、切分字串:

re.split(r'[\s\,\;]+', 'a,b;; c  d')
先編譯生成正規表示式物件再匹配

import re

re_telephone = re.compile(r'^(\d)-(\d)$')

re_telephone.match('0571-8675764').groups()

關於python中加日誌以及異常處理

寫日誌 author zyb data 2020 5 23 import nnlog import traceback log nnlog.logger python.log level debug backcount 5,when d log.debug eeee 比較詳細的資訊 log.info...

python 日誌 異常處理

import pymysql import nnlog import traceback 示例一 l 1,2,3 d try print l 4 print d name except exception as e print 出異常了 e else print 不出異常的時候走到這裡 finall...

python 什麼是異常處理以及異常處理的兩種方式

attributeerror 試圖訪問乙個物件沒有的樹形,比如foo.x,但是foo沒有屬性x ioerror 輸入 輸出異常 基本上是無法開啟檔案 importerror 無法引入模組或包 基本上是路徑問題或名稱錯誤 indentationerror 語法錯誤 的子類 沒有正確對齊 indexer...