Python异常处理和单元测试简介

嵌入式技术

1372人已加入

描述

程序越复杂,出现异常的概率越大,如何在程序崩溃之前,捕捉异常,预判异常?项目越大,需要测试的内容越多,如何快速有效地测试?

1、异常处理

# 异常处理,以try开始,try里面的内容,是可能发生的错误
try:
    weigt = float(input("输入体重:"))
# 如果输入的值不符合要求,将会抛出ValueError异常
except ValueError:
    print("请输入数值")
# 如果除数为0,将会抛出ZeroDivisionError异常
except ZeroDivisionError:
    print("除数不能为0")
# 异常类型非常多,列出所有异常不太现实
# 对于那些没有明确列出的异常,可以用except对其捕捉
except:
    print("捕捉所有为止错误")
# 当try里面的语句没有执行时,也就是没有异常的时候,执行else
else:
    print("没有异常做点什么")
# 无论错误是否发生,都会被执行
finally:
    print("不管怎么样,还是要做点什么刷下存在感")

需要注意的是:

  • 异常处理从上向下执行,如果匹配到了某种异常,后面的异常处理将不会继续执行,例如抛出了ValueError异常,ZeroDivisionError异常和except异常都不会执行
  • 如果没有捕捉到具体的异常种类,except异常将会执行,但不会给出具体的异常提示。所以,异常种类越详细,抛出异常信息越详细。
  • 仅在没有异常抛出的情况下,才会执行else,如果抛出了异常,将不会执行
  • 不管是否抛出异常,最后finally都会被执行

2、单元测试

建立被测试文件shopping.py

class Shopping:
    def __init__(self, price, number):
        self.price = price
        self.number = number


    def totalPrice(self):
        return self.price * self.number


    def productQuantity(self):
        return self.number

建立测试文件test_shopping.py

# 加入库
import unittest
# 加入需要测试的类
# 如果测试文件与被测试文件在同一目录,用文件名+类名
from shopping import Shopping


# 新建一个类,继承unittest库中的TestCase类
class TestShopping(unittest.TestCase):
    # 当进行单元测试的时候,首先会执行setUp方法
    def setUp(self):
        # 实例化对象
        self.shopList = Shopping(4, 3)


    # 测试totalPrice方法,必须以test_开头
    def test_totalPrice(self):
        # assertEqual判断是否相等
        self.assertEqual(self.shopList.totalPrice(), 12)


    def test_productQuantity(self):
        self.assertEqual(self.shopList.productQuantity(), 4)

断言的种类还有很多,这里只列举了一种断言:assertEqual

如果测试通过

单元测试

如果测试不通过

单元测试

还可以在python终端,执行命令,对项目中所有文件进行单元测试

python -m unittest

单元测试

案例代码没有给出非常详细的解释,刨除了很多语法细节,可以作为一个快速掌握Python异常处理和单元测试的笔记查阅。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分