Python用异常对象(exception object)来表示异常情况。遇到错误后,会引发异常。如果异常对象并未被处理和捕获,程序就会终止执行。如果这些错误信息就是异常的全部功能,那么它也就不必存在了。事实上,每个异常都是一些类的实例,这些实例可以被引发,并且可以用很多方法进行捕捉,使得程序可以捕捉错误并且对其进行处理,而不是让整个程序失效。
try:
可能出现异常的语句
except 异常类型,变量:
print 变量
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
断言错误时:
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模块
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