1. 程式人生 > >python處理異常、日誌以及正則表示式

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

異常捕獲

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

def foo(s):
    return 10 / int(s)

def bar(s):
    return foo(s) * 2

def main():
    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

def bar():
    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個字元
{n,m}表示n-m個字元
.可以匹配任意字元
^表示行的開頭,^\d表示必須以數字開頭。
$表示行的結束,\d$表示必須以數字結束。

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

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

s = r'this is\-test' # Python的字串
import re
re.match(r'^\d{3}\-\d{3,8}$', '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{4})-(\d{5,11})$')
re_telephone.match('0571-8675764').groups()