跳至主要內容

错误、调试与测试

yczha大约 2 分钟python基础python语法python

Python基础系列内容为学习廖雪峰老师Python3教程的记录,廖雪峰老师官网地址:廖雪峰Python3教程open in new window

  • 错误处理:Python内置了一套try...except...finally... 的错误处理机制来处理错误。其工作原理为:程序先尝试执行try 语句块内的内容,如果发生错误,则转向except 语句块内的内容执行,最后执行finally 语句块内的语句。因而,在写代码把可能出错的代码写在try 语句块内,这样当程序发生错误时就会跳过相应语句块继续执行而不会异常退出。让我们来看一下其工作机制:

    try:
        print('try...')
        r = 10 / 0
        print('result:', r)
    except ZeroDivisionError as e:
        print('except:', e)
    finally:
        print('finally...')
    print('END')
    

    上面的代码在执行时会发生一个除0错误,让我们来运行一下:

    try...
    except: division by zero
    finally...
    END
    [Finished in 0.8s]
    

    看得出来,上面的代码执行到到r=10/0出错后转到except 语句继续执行而不是立即退出,最后执行了finally 。另外值得一提的是except 可以抛出很多类型的错误,这些错误可以在这里看到:https://docs.python.org/3/library/exceptions.html#exception-hierarchyopen in new window

  • 记录错误:当我们使用try...except...finally... 语句处理错误时,虽然让程序跳过错误继续执行,但是我们在后期可能需要知道这些错误信信息以便程序改进 ,Python内置的logging模块可以非常容易的记录错误信息,其可以方便的设定打印信息的级别,也可以设定打印的位置(比如控制台或者输出文件),其打印信息级别分为:DEBUGINFOWARNNINGERROR。下面看一个实例:

    import logging#导入logging包
    logging.basicConfig(level=logging.INFO)#设定打印等级为:WARNNING
    try:
        s = '0'
    	n = int(s)
    	logging.info('n = %d' % n)#打印信息到控制台
        print(10 / n)
    except ZeroDivisionError as e:
        logging.info(e)
    finally:
        print("program executes done!")
    

    我们来看一下输出:

    INFO:root:n = 0
    INFO:root:division by zero
    program executes done!
    [Finished in 0.2s]
    

    我们来分析上面代码的结果:程序首先执行try 语句块的内容,然后logging.info('n = %d' % n) 语句打印出了第一个控制台信息:INFO:root:n = 0 ,然后语句print(10 / n) 出错,程序跳过该语句执行except中的内容,然后打印出了出错信息INFO:root:division by zero ,最后程序执行finally 内的语句打印出信息:program executes done!

  • 调试:暂定

  • 单元测试:暂定

  • 文档测试:暂定