python基础之异常处理、调试和正则表达式

来源:互联网 发布:免费下载绘图软件 编辑:程序博客网 时间:2024/05/21 22:30

1.异常处理


1.错误:

在程序运行过程中,总会遇到各种各样的错误。
可以预知的错误:
     比如,有的错误是程序编写有问题造成的,可由程序员修改。有的错误是用户输入造成的,可由用户检查解决。
无法预知的错误:
     还有一类错误是完全无法在程序运行过程中预测的,比如写入文件的时候,磁盘满了,写不进去了,或者从网络抓取数据,网络突然断掉了。这种错误就需要一定的处理机制。

2.解决方法

Python 内置了一套异常处理机制,来帮助我们进行错误处理。
      try...except...finally... 的错误处理机制
 
- 用 try 来运行可能会出错的代码;
- 如果执行正确,则except 语句块不会执行;
- 如果执行错误,直接跳转至错误处理代码,即except语句块;
- 如果有 finally 语句块,不管try语句块内容是否正确,都会执行 finally
语句块错误处理
• 错误有很多种类,如果发生了不同类型的错误,应该由不同的 except语句块处理。因此可以有多个 except 来捕获不同类型的错误。
• Python 的错误其实也是 class,所有的错误类型都继承自BaseException;在使用except 捕获该类型的错误,还把其子类也“一网打尽”。
• Python 内置的 logging 模块可以记录错误信息。logging.exception(e)抛出错误
可以抛出错误。   可以定义一个错误的 class,选择好继承关系,然后,用raise 语句抛出


2.调试

我们也需要跟踪程序的执行,查看变量的值是否正确,这个过程称为调试。


1.print

      第一种方法简单直接粗暴有效,就是用 print 把可能有问题的变量打印出来看看。用 print 最大的坏处是将来还得删掉它,运行结果也会包含很多垃圾信息。

2. 断言:
• 凡是用 print 来辅助查看的地方,都可以用断言(assert)来替代:;
• 如果断言失败, assert 语句本身就会抛出 AssertionError
• Python 解释器执行时可以用 -O 参数来关闭 assert,把所有的 assert 语句当成 pass。

3. logging
• logging 不会抛出错误,而且可以输出到文件;
• logging.info() 就可以输出一段文本到日志文件中。
• logging.basicConfig(level=logging.INFO)指定记录信息的级别,有
debug , info , warning , error等几个级别。

4. pdb
    pdb让程序以单步方式运行,随时查看运行状态。n 可以单步执行代码,p 变量名 来查看变量,q 结束调试,退出程序。
5.pdb.set_trace
    在可能出错的地方放一个 pdb.set_trace() ,就可以设置一个断点。程序会自动在 pdb.set_trace() 暂停并进入 pdb 调试环境, p 查看变量, c 继续运行。





3..正则表达式

1.定义:
正则表达式是一种用来匹配字符串的强有力的武器。它的设计思想是用一种描述性的语言来给字符串定义一
个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的。

2. 基本模式
 字面模式: 就是字面长量,就代表其本身
 .                 匹配任何字符
 \w               匹配一个字母或数字 \W 匹配非字母或数字
 \s               匹配空白 \S 匹配非空白字符
 \d               匹配数字
 ^                开头 $ 结尾
 \                转义字符次数的匹配
次数的匹配 , 匹配其前面的字符出现的次数 :
  *               0 次或多次
  +              一次或多次
  ?              零次或一次
  {n}             出现 n 次
 {m,n}          出现 m 到 n 次中括号



[0-9a-zA-Z\_]                                         可以匹配一个数字、字母或者下划线;
[0-9a-zA-Z\_]+                                      可以匹配至少由一个数字、字母或者下划线组成的字符串;
[a-zA-Z\_][0-9a-zA-Z\_]{0, 19}              更精确地限制了变量的长度是 1­20个字符;
A|B                                                      可以匹配 A 或 B
^\d                                                       表示必须以数字开头
 \d$                                                      表示必须以数字结束思考

                        
match() 方法判断是否匹配,如果匹配成功,返回一个 Match对象,否则返回 None 。

2. 用编译后的正则表达式去匹配字符串。

• re.match(p,text) :                p 为正则表达式模式, text 要查找的字符串,会返回一个match 对象
• re.search(p,text) :               只要在 text 中匹配到了 p 就返回,只返回第一个匹配到的
• re.findall(p,text) :                将能匹配上的全返回,会返回一个 list
• re.split(p,text) :                   按照 p 匹配,并且以匹配到的字符为分隔符切割 text, 返回一个切割后的 list
• re.sub(p,s,text) :                替换,将 p 匹配到的字符替换为 s.
• pattern = re.compile(p)     先编译 p 模式,当正则表达式模式比较复杂的时候,会先编译,然后再使用


原创粉丝点击