python学习-基础-错误、调试、测试

  1. 错误处理

# 在程序运行的过程中,如果发生了错误,可以事先约定返回一个错误代码,这样,就可以知道是否有错,以及出错的原因
# 
# # try
# 当我们认为某些代码可能会出错时,就可以用try来运行这段代码,如果执行出错,则后续代码不会继续执行,而是直接跳转至错误处理代码,即except语句块,
# 执行完except后,如果没有错误发生,可以在except语句块后面加一个else,当没有错误发生时,会自动执行else语句,如果有finally语句块,则执行finally语句块,至此,执行完毕。
# ValueError ZeroDivisionError
try:
	print('try...')
	r = 10 / 2
	print('result:', r)

except Exception as e:
	print('except:', e)
else:
	print('no error!')
finally:
	print('finally...')
print('END')

#使用try...except捕获错误还有一个巨大的好处,就是可以跨越多层调用,所有不需要在每个可能出错的地方去捕获错误,只要在合适的层次去捕获错误就可以了
#
#调用栈
#如果错误没有被捕获,它就会一直往上抛,最后被Python解释器捕获,打印一个错误信息,然后程序退出。
#
# 记录错误
# 既然我们能捕获错误,就可以把错误堆栈打印出来,然后分析错误原因,同时,让程序继续执行下去。
# Python内置的logging模块可以非常容易地记录错误信息:
# 通过配置,logging还可以把错误记录到日志文件里,方便事后排查。
import logging

def foo(s):
    return 10 / int(s)

def bar(s):
    return foo(s) * 2

def main():
    try:
        bar('0')
    except Exception as e:
        logging.exception(e)

main()
print('END') # 这里最终会执行,

# 抛出错误
#  首先根据需要,可以定义一个错误的class,选择好继承关系,然后,用raise语句抛出一个错误的实例:
class FooError(ValueError):
    pass

def foo1(s):
    n = int(s)
    if n==0:
        raise FooError('invalid value: %s' % s)
    return 10 / n

foo1('0')

# 如果可以选择Python已有的内置的错误类型(比如ValueError,TypeError),尽量使用Python内置的错误类型
# 捕获错误目的只是记录一下,便于后续追踪。但是,由于当前函数不知道应该怎么处理该错误,所以,最恰当的方式是继续往上抛,让顶层调用者去处理。
# 
# 调试
# 
# print() 打印
# assert  断言 
# 	assert n != 0, 'n is zero!' 如果断言失败,assert语句本身就会抛出AssertionError:
# logging 
# 	它允许你指定记录信息的级别,有debug,info,warning,error等几个级别
# 	添加配置logging.basicConfig(level=logging.INFO)
# 	logging.info()
# pdb
# 	第4种方式是启动Python的调试器pdb,让程序以单步方式运行
# 	python -m pdb err.py
# pdb.set_trace()
# 	这个方法也是用pdb,但是不需要单步执行,我们只需要import pdb,然后,在可能出错的地方放一个pdb.set_trace(),就可以设置一个断点:
# 	

猜你喜欢

转载自blog.csdn.net/u011342216/article/details/86473450