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

猜你喜欢

转载自blog.csdn.net/chang_li/article/details/81590220