异常处理

Python用异常对象(exception object)来表示异常情况。遇到错误后,会引发异常。如果异常对象并未被处理和捕获,程序就会终止执行。如果这些错误信息就是异常的全部功能,那么它也就不必存在了。事实上,每个异常都是一些类的实例,这些实例可以被引发,并且可以用很多方法进行捕捉,使得程序可以捕捉错误并且对其进行处理,而不是让整个程序失效。

异常捕获:

try:
    可能出现异常的语句
except 异常类型,变量:
    print 变量  
finally:
    语句
  • try:里面是可能产生异常的代码,如果执行正确,则expert语句块不会执行,如果执行错误,直接跳转至错误处理代码except语句块;
  • except: 捕获异常,
  • finally:无论是否有异常,都执行该代码;
 try:  #在捕获到一个异常后就结束try后的其他语句
    # a = 10 / 0
    # a = []
    # print a[3]
    # a = 1
    print 1
    print a
except  (ZeroDivisionError,IndexError), e:  #e只是个变量
    print e
finally:
    print "game over....."

这里写图片描述

try:
    a = 10 / 0
    # a = []
    # print a[3]
    # a = 1

    print 1
    print a

except  Exception,  e:  #Exception是所有异常的父类
    print e
finally:
    print "game over....."

这里写图片描述

抛出异常

关键字:raise,抛出异常,程序执行结束。

def get_age(age):
    if age<0:
        print 1 
        raise Exception("Age is not legal") #"()"中的提示语可以不写
        print 2

get_age(-1)
print 3
if __name__=="__main__":
    pass

这里写图片描述

自定义异常:

class AgeError(Exception):
     pass

def get_age(age):
    if age<0:
        print 1
        raise AgeError("Age is not legal") 
        print 2

get_age(-1)
print 3
if __name__=="__main__":
    pass

这里写图片描述

调试

1>print
print适当的代码块结果来进行调试,简单直接粗暴。用print最大的坏处是需要删掉它,运行结果也会包含很多垃圾信息。
2>断言assert

  • 用print来辅助查看的地方,都可以用assert来代替;
  • 如果断言失败,assert语句本身就会抛出AssertionError。
  • python解释器执行时可以用-O参数关闭assert,把所有的saaert语句当成pass。
  • 缺点:非此即彼

断言错误时:

b=abs(-1)
print type(b)
assert type(b)==str,"b is int"
print b

if __name__=="__main__":
    pass

这里写图片描述

断言正确时:

b=abs(-1)
print type(b)
assert type(b)==int,"b is str"
print b

if __name__=="__main__":
    pass

这里写图片描述

3>logging模块
logging不会抛出错误,将结果输出到文件;
- logging.basicConfig(level=logging.INFO)指定记录信息的级别,有debug,info,warn,error,critical等几个级别。默认warn及以上记录。

import logging
logging.info("info")
logging.warn("warn")
logging.critical("critical")

这里写图片描述

import logging
logging.basicConfig(level=logging.INFO)
logging.info("info")
logging.warn("warn")
logging.critical("critical")

这里写图片描述

import logging
logging.basicConfig(level=logging.INFO)
logging.info("info")
logging.warn("warn")
logging.critical("critical")

a=1
logging.info("a=%d"%a)

if __name__=="__main__":
    pass

这里写图片描述

4>pdb模块

  • pdb让程序以单步方式运行
import pdb
s=0
s=s+1
n=str(s)
print n

if __name__=="__main__":
    pass

调试:
view—>Tool Windows—>Terminal
python -m pdb myTest.py
n #单步执行
c #继续执行
p 变量 #查看变量
q #退出
这里写图片描述

设置断点:(程序会自动在断点处暂停并进入调试环境)

pdb.set_trace()
import pdb
s=0
s=s+1
pdb.set_trace() 
n=str(s)
print n

if __name__=="__main__":
    pass

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值