python 错误异常处理

错误类型

  • 语法错误
SyntaxError: EOL while scanning string literal

看着syntaxerror就是语法错误
AttributeError:属性异常

  • 语义错误
  • 逻辑错误
  • 找到错误
    try后面输入可能有异常的程序
    遇到错误就打印,except后面跟可能出错的类型,如果没有跟,所有错误都会打印
# try后面输入可能有异常的程序
try:
    x = 5 / 2
    print(x)
# 遇到错误就打印,except后面跟可能出错的类型,如果没有跟,所有错误都会打印
except ZeroDivisionError as e:
    print('不能除零',e)
except:
    print('程序遇到错误')
else:
    print('没有异常')

异常处理

try: 有可能出现异常代码
except:异常类型as 实例:捕获特定异常
else:未遇到异常
finally:不论是否遇到异常均会执行
raise:手动抛出异常

import unittest


class Coder:
    def __init__(self, name):
        self.name = name
        self.skills = []

    def mastering_skill(self, skill):
        self.skills.append(skill)

    def show_skills(self):
        print('掌握技能:')
        for skill in self.skills:
            print('-', 'skill')


class CoderTestCase(unittest.TestCase):
    def test_skill_in(self):
        c = Coder('Tom')
        c.mastering_skill('Python')
        c.mastering_skill('C++')

        self.assertIn('Python',c.skills)

if __name__ == "__main__":
    unittest.main()

测试一个类需要导入unittest模块,掌握一下assert板块。具体内容还需要摸索。

单元测试

在代码交付之前,需要对代码的功能进行测试,观察功能是否完备

基本结构

例子:测试一下加法和减法
class_exercise.py

def add(a, b):
    return a + b


def substract(a, b):
    return a - b

mytest.py

import unittest
from new_class_.class_exercise import add
from new_class_.class_exercise import substract


class Mytest(unittest.TestCase):
    def test_add(self):
        self.assertEqual(9, add(5, 3))

    def test_substract(self):
        self.assertEqual(2, substract(5, 3))


if __name__ == '__main__':
    unittest.main()

class Mytest(unittest.TestCase):这个是必须导入unittest.TestCase这个包,下面定义以
def test_开头,表示测试,最后以

if __name__ == '__main__':
    unittest.main()

收尾。

断言的类型

import unittest

person = {'name': "Mike", 'age': 20}
numbers = [1, 2, 3, 4, 5, 13, 88]
s = 'DIqu leshan'


class TestAssert(unittest.TestCase):
    def test_assert_method(self):
        # 判断值是否相等
        # self.assertEqual('Mike', person.get('name'))

        # 判断是否为真
        # self.assertTrue('leshan' in s)

        # 判断是否包含
        # self.assertIn('leshan', s)

        # 判断是否约等于
        # self.assertAlmostEqual(3.3, 1.1 + 2.2)

        # 判断Id值是否相等
        # self.assertIs(True + 1, 2)

        # 判断是否为空
        # self.assertIsNone(person.get('Name', None))

        # 判断是否为每个变量的实例
        # self.assertIsInstance(s, str)

        # 判断是否大于
        # self.assertGreater(2,3)

    if __name__ == '__main__':
        unittest.main()

简化版本

import unittest
from new_class_.class_exercise import Calculator


class CalculatorTest(unittest.TestCase):
    def setUp(self):
        self.c = Calculator(5, 3)

    def test_Add(self):
        self.assertEqual(8, self.c.add())

    def tearDown(self):
        del self.c


if __name__ == '__main__':
    unittest.main()

容易踩的坑

  1. 如何简单的理解Python中的if name == 'main

通俗的理解__name__ == '__main__':假如你叫小明.py,在朋友眼中,你是小明(__name__ == '小明');在你自己眼中,你是你自己(__name__ == '__main__')

if __name__ == '__main__'的意思是:当 .py文件被直接运行时,if __name__ == '__main__'之下的代码块将被运行;当.py文件以模块形式被导入时,if __name__ == '__main__'之下的代码块不被运行。

参考博客

  1. 踩过的坑:导入的时候导入错误,为什么?

在这里插入图片描述
这样就报错了,必须写成
在这里插入图片描述
为什么呢

参考博客

  1. 为什么每个文件夹下面的__init__文件都删不掉?

一个包是一个带有特殊文件 init.py 的目录。init.py 文件定义了包的属性和方法。其实它可以什么也不定义;可以只

是一个空文件,但是必须存在。如果 init.py 不存在,这个目录就仅仅是一个目录,而不是一个包,它就不能被导入或者包含其它的模块和嵌套包。
参考博客

发布了25 篇原创文章 · 获赞 2 · 访问量 825

猜你喜欢

转载自blog.csdn.net/Di_Panda/article/details/105583140