Python基础(Day 9)(异常处理 单元测试 f格式化 日期操作)

知识点总结:

  1. 异常处理
  2. 单元测试
  3. f格式化
  4. 日期操作

异常处理

在这里插入图片描述

  • 异常处理代码组织
try:
    '''
        code block
    '''

# 通过except捕获指定异常,通过as对error增加引用
except AttributeError as e:
    print('AttributeError is catch', e)

# 通过except捕获未被指定处理的异常
except:
    # 通过raise手动抛个异常
    raise RuntimeError()

# 通过else执行未出现异常的情况
else:
    print('no error')

# 通过finally最终都会执行部分
finally:
    print('finally body is calling')

单元测试

引用自: https://medium.com/swlh/introduction-to-unit-testing-in-python-using-unittest-framework-6faa06cc3ee1

  • 动手写test case
    在这里插入图片描述

  • 测试类需要继承unittest.TestCase

  • 直接声明方法即为单元测试方法
    在这里插入图片描述

  • 可以声明多个测试方法(在一个test case中)
    在这里插入图片描述

  • 注意命名规范
    在这里插入图片描述

  • However, using “test_” increases the readability of the code and also conforms to the PEP — 8 : Style Guide for Python Code

  • 可以定义多个测试类在一个模块中,尽可能的明确用途(见名知义)
    在这里插入图片描述

  • 可以在不同类中声明相同的测试方法名
    在这里插入图片描述

How to write Unit Tests (The AAA Model)

All unit tests must be written using AAA model where AAA expands to Arrange, Act & Assert. Here is what is meant by it

  • Arrange → Setting up of all the prerequisites required for the test to run
  • Act → Run the actual code under test
  • Assert → Verify whether the code is indeed running as expected
Example of a AAA Unit Test

Let’s assume that we have a sum(a,b) function defined as
在这里插入图片描述

  • test_sumtest()测试我们的sum方法,声明a, b作为参数传入北侧方法sum(),将返回值result作为断言的参数。看起来没毛病是不是,可是当我们再加一个测试方法test_sumtest_rev()的时候还要在写一遍a, b,太累了于是乎👇
    在这里插入图片描述

  • 于是将所需的初始值(初始资源创建)放在setUp()中。执行用例时,由测试框架调用完成初始化,无需自己写代码初始化。
    在这里插入图片描述

  • 有初始化方法就会有对应的销毁方法tearDown()
    在这里插入图片描述

数值处理

在这里插入图片描述

>>> a = 222

# PY3以f开头字符串代表format
>>> f'数值:{a}'
'数值:222'
# f代表浮点数
>>> '数值:{:f}'.format(a)
'数值:222.000000'

# f开头写法,功能同上
>>> f'数值:{a:f}'
'数值:222.000000'

# 带正负号
>>> f'数值:{a:+f}'
'数值:+222.000000'

# 声明浮点型
>>> b = 100121234.445512344

# 用,分割高位
>>> f'数值:{b:,f}'
'数值:100,121,234.445512'

# 保留3位小数(四舍五入)
>>> f'数值:{b:.3f}'
'数值:100121234.446'
>>> x = 18
>>> y = 23

# 保留两位小数
>>> '{:.2f}'.format(x/y)
'0.78'

# 百分号形式显示
>>> '{:.2%}'.format(x/y)
'78.26%'

日期时间

在这里插入图片描述

>>> import datetime

# 最大年
>>> datetime.MAXYEAR
9999

# 最小年
>>> datetime.MINYEAR
1

# 获取今天
>>> today = datetime.date.today()
>>> today
datetime.date(2019, 11, 26)
>>> type(today)
<class 'datetime.date'>
>>> today.year
2019
>>> today.month
11
>>> today.day
26

# 星期从 0-6
>>> today.weekday()
1
>>> today.isoweekday()
2

# 指定日期
>>> birthday = datetime.date(1883, 3, 12)
>>> birthday.year
1883
>>> birthday.month
3
>>> birthday.day
12

# 指定时间
>>> t = datetime.time(12, 46, 32)
>>> type(t)
<class 'datetime.time'>
>>> t.hour
12
>>> t.minute
46
>>> t.second
32

# 获取当前日期时间
>>> now = datetime.datetime.now()
>>> now
datetime.datetime(2019, 11, 26, 23, 5, 57, 945577)

# string类型
>>> s = '2018-3-15'
>>> type(s)
<class 'str'>

# string转换为datetime
>>> t = datetime.datetime.strptime(s,'%Y-%m-%d')
>>> t
datetime.datetime(2018, 3, 15, 0, 0)
>>> now
datetime.datetime(2019, 11, 26, 23, 5, 57, 945577)
>>> type(t)
<class 'datetime.datetime'>

# datetime转为string
>>> str_now = now.strftime('%Y/%m/%d')
>>> str_now
'2019/11/26'

  • 时间操作

>>> now
datetime.datetime(2019, 11, 26, 23, 5, 57, 945577)
>>> birthday = datetime.datetime(1949, 10, 1, 6, 30, 00)

# 时间差
>>> diff = now - birthday
>>> diff

# datetime.timedelta(days, seconds, microseconds)
datetime.timedelta(25623, 59757, 945577)
>>> diff.days
25623
>>> diff.seconds
59757

# 全秒差值
>>> diff.total_seconds()
2213886957.945577

# 指定days日期加
>>> now + datetime.timedelta(days=100)
datetime.datetime(2020, 3, 5, 23, 5, 57, 945577)

# 日期减
>>> now - datetime.timedelta(days=100)
datetime.datetime(2019, 8, 18, 23, 5, 57, 945577)

# 指定seconds日期加
>>> now + datetime.timedelta(seconds=3000)
datetime.datetime(2019, 11, 26, 23, 55, 57, 945577)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值