天天看点

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