天天看點

python處理異常、日志以及正規表達式

異常捕獲

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

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

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

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==:
        raise ValueError('invalid value: %s' % s)
    return  / 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 / n)
           

正規表達式

1、常用表達式定義:

\d

可以比對一個數字

\w

可以比對一個字母或數字

\s

可以比對一個空格(也包括Tab等空白符)

*

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

+

表示至少一個字元

?

表示0個或1個字元

{n}

表示n個字元

{n,m}

表示n-m個字元

.

可以比對任意字元

^表示行的開頭,

^\d

表示必須以數字開頭。

$

表示行的結束,

\d$

表示必須以數字結束。

2、特殊字元

若要比對特殊字元,必須首先使字元”轉義”,即,将反斜杠字元\ 放在它們前面。特殊字元包括

$,{},(),[],*,+,.,^,|,\,?

3、re子產品

Python提供

re

子產品,包含所有正規表達式的功能。強烈建議使用Python的r字首,就不用考慮轉義的問題了:

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()