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()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值