• Python3入门(十)——调试与测试


    一、异常处理

      1.try...except...finally...

        这个也就是Java里的try...cath..finally...了,直接看经典代码:

    try:
        print("开始执行try...")
        s = 1 / 0
        print("计算结果是%s" % s)
    except ZeroDivisionError as e:
        print("异常为:", e)
    finally:
        print("执行finally...")
    print("END...")

        处理结果和意料是一样的:

    开始执行try...
    异常为: division by zero
    执行finally...
    END...

        同样,可以并列捕捉多个异常:(此外在except后还可以接else:来处理没有异常)

    except ValueError as e:
        print('ValueError:', e)
    except ZeroDivisionError as e:
        print('ZeroDivisionError:', e)

        当然,以上的异常都是继承自BaseException(也就是Java的Exception啦.)

      Python也不像Java一样,有时候强迫你去在出异常的地方捕获或抛出,只需要在调用的地方处理即可:

    def foo(s):
        return 10 / int(s)
    
    def bar(s):
        return foo(s) * 2
    
    def main():
        try:
            bar('0')
        except Exception as e:
            print('Error:', e)
        finally:
            print('finally...')

        2.记录错误

          使用python内置的Logging模块即可

    import logging
    try:
        print("开始执行try...")
        s = 1 / 0
        print("计算结果是%s" % s)
    except ZeroDivisionError as e:
        logging.exception(e)
    finally:
        print("执行finally...")
    print("END...")

        后面logging还可以通过文件进行记录,和Java的Log4j是一样的

        3.抛出错误

          通过raise关键字实现和Java一样的throw功能了

    class MyException(ValueError):
        pass
    
    
    def my_ex():
        n = input("输入")
        if n == 0:
            raise MyException("输入错误,错误的值为%s" % n)
        return n + 1

    二、程序调试

      1.print

        万能的print,也就是Java的sout了。当然,这也仅仅是第一招了。也是新手常用的招了

      2.断言

        所有print()的地方都可以用断言assert来替代,print的小改版:

      n = int(s)
        assert n != 0, 'n is zero!'
        return 10 / n

      3.logging

        对应log4j的贴心配置

    import logging
    logging.basicConfig(level=logging.INFO)
    
    
    def my_ex():
        n = input("输入")
        if n == 0:
            logging.info("INFO日志,变量n为:%s" % n)
        return n + 1

      更多logging配置,后续进阶篇补充

      在Pycharm中断点调试与IDEA一样,同家族产品

      4.pdb

        这是python内置的调试器。当然了。这里当然使用熟悉的Pycharm了

    三、单元测试

      一个经典的单元测试如下:

    import unittest
    
    
    class MyTest(unittest.TestCase):
        def setUp(self):
            print("setup...")
    
        # 以test开头的test_xx的就是测试方法
        def test_key(self):
            d = dict()
            d['k'] = "value"
            self.assertEqual(d['k'], "value")
    
        def tearDown(self):
            print("tearDown...")

       首先,单元测试类需要继承自unittest.TestCase

      其次,以test_开头的的方法就是测试方法了,其中最常用的就是assertEqual来进行判断

      再者,setUp,tearDown就相当于Java单元测试的Before和After了

    四、文档测试

      python中内置的doctest,这里暂不赘述

     

  • 相关阅读:
    mysql 索引
    私有变量 _变量名 、__变量名、__变量名__的区别
    python中 is 和 == 的区别
    赋值,浅拷贝,深拷贝
    Django model字段类型清单
    (转)nginx uwsgi wsgi django 这些东西究竟是什么关系
    线性结构
    复杂度_最大子列和问题(2)
    复杂度_最大子列和问题(1)
    应用实例——最大子列和问题
  • 原文地址:https://www.cnblogs.com/jiangbei/p/8942159.html
走看看 - 开发者的网上家园