zoukankan      html  css  js  c++  java
  • Python 错误的处理

    异常的捕获与处理

    什么是错误

    简而言之:还没运行,在语法解析的时候,就发现语法存在问题,这个时候就是错误。 

    什么是异常

    简而言之:代码写好之后,无明显语法错误(这个时候,编辑器不知道有错,语法解析时也不知道有错),但是运行的时候,会发生错误,这个时候称之为异常。 

    什么是警告

    import warnings
    
    def fxn():
        warnings.warn("deprecated", DeprecationWarning)

    异常怎么处理

    异常的处理形式如下: 

    try:
        你要做的可能会发生异常的事
    except 可能会发生的异常:
        发生异常之后要做的事
    except 可能会发生的异常2:
        发生异常之后要做的事2
    finally:
        最终要做的事情

    比如下面的代码:

    try:
        print(10/0)
    except ZeroDivisionError:
        print("除数不能为0")

    这个时候再次运行,就不会再出现异常

    在平时的开发中,也会使用预定义清理的操作,来避免因为异常而导致程序奔溃,比如在进行IO操作的时候,可以使用: 

    with open("myfile.txt") as f:
        for line in f:
            print(line, end="")

    这样一旦运行时发生异常,程序会自动帮你关闭文件,避免整个程序奔溃

    自定义异常与异常的抛出 

    虽然python中提供了非常多的内置异常类,但是,在平时开发中,针对特定的业务,可能需要自定义异常,此时怎么办?

    通过自定义继承Exception类的类,可以实现异常的自定义 

    class MyException(Exception):
        def __init__(self, parameter):
            err = '非法入参{0},分母不能为0'.format(parameter)
            Exception.__init__(self, err)
            self.parameter = parameter

    当我们代码中碰到某种特殊业务情况,需要向调用方抛出自定义异常,可以使用 raise 关键字

    from chapter12.my_exception import MyException
    
    def my_fun(x):
        if x == 0:
            raise MyException(x)
        return 12/x
    
    print(my_fun(-12))

    我们在捕获异常之后,也可以直接将异常抛出,此时直接使用 raise 关键字即可

    def my_func():
        try:
            print(10 / 0)
        except ZeroDivisionError:
            print("除数不能为0")
            # 此处直接将捕获的异常抛出
            raise

    单元测试

    什么是单元测试

    • 单元测试(英语:Unit Testing)又称为模块测试,是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。在过程化编程中,一个单元就是单个程序、函数、过程等;对于面向对象编程,最小单元就是方法,包括基类(超类)、抽象类、或者派生类(子类)中的方法。
    • 简而言之:就是写一段代码,用来验证另一段代码在特定情况下的正确性

    单元测试的好处与坏处

    • 好处:减少bug、提高代码质量、可以放心重构(在未来修改实现的时候,可以保证代码的行为仍旧是正确的)
    • "坏处":占用开发时间,尤其是在起步阶段

    python中,如何编写单元测试 

    1、新建python文件,编写具体业务代码 

    class MyTest():
      def my_add(self, a, b):
        return a + b

    2、右键类名,选择Go TO ==test,或者直接 ctrl+shift +t

    3、填写好相应的模块名及测试类名,点击ok,此时pycharm会帮我们自动创建测试模块及类

    4、编写测试代码,并执行单元测试

    import unittest
    from unittest import TestCase
    from test import MyTest
    
    class TestMyTest(TestCase):
    def test_add(self):
        s= MyTest()
        self.assertEqual(s.my_add(1,5),6)
    
    if __name__ == "__main__":
    unittest.main()
  • 相关阅读:
    关于这个 blog
    P6499 [COCI2016-2017#2] Burza 题解
    CF1172F Nauuo and Bug 题解
    CF1479D Odd Mineral Resource 题解
    CF1442E Black, White and Grey Tree 题解
    CF1442D Sum 题解
    CF1025D Recovering BST 题解
    CF1056E Check Transcription 题解
    CF1025F Disjoint Triangles 题解
    红包算法的PHP实现
  • 原文地址:https://www.cnblogs.com/jwen1994/p/13127651.html
Copyright © 2011-2022 走看看