廖雪峰Python学习笔记day7

学习笔记day6

# python study day7

# 异常发生情况:
# 1、程序编写问题
# 2、用户输入问题
# 3、外在因素,内存、网络
# 异常处理,通过python的pdb调试可以单步方式执行代码

# 异常捕获 try…except…finally。基类异常:BaseException
# import logging
# try:
#     print('try...')
#     r = 10 / int('0')
#     print('result:', r)
# except ValueError as e:
#     logging.exception(e) # 打印记录错误信息不影响执行
# except ZeroDivisionError as e: # 该异常不应是ValueError子类
#     logging.exception(e)
# else: 
#     print('no error!')
# finally: # else,finally 可省略
#     print('finally!')
# print('END')
# 自定义异常类
# class MyError(ValueError):
#     pass
# def foo(s):
#     n = int(s)
#     if n == 0:
#         raise MyError('invalid value: %s' % s)
#     return 10 / n
# foo('0')
# raise 不带参数会把当前错误原样抛出,也可以转化为另一种异常:
# try:
#     10 / 0
# except ZeroDivisionError:
#     raise ValueError('input error!')
# from functools import reduce
# import logging
# def str2num(s):
#     return int(s)  # try: return int(s) except: return float(s)
# def calc(exp):
#     ss = exp.split('+')
#     ns = map(str2num, ss)
#     return reduce(lambda acc, x: acc + x, ns)
# def main():
#     try:
#         r = calc('100 + 200 + 345')
#         print('100 + 200 + 345 =', r)
#         r = calc('99 + 88 + 7.6')
#         print('99 + 88 + 7.6 =', r)
#     except ValueError as e:
#         logging.exception(e)
#         print('please input correct value!')
#     finally:
#         print('End')
# main()

# 调试方式
# 1、print()
# 直接在需要的地方打印值
# 2、断言 assert
# def foo(s):
#     n = int(s)
#     assert n != 0, 'n is zero!' # 断言失败抛出AssertionError
# 3、logging
# import logging # 添加配置可以输出到文件
# logging.basicConfig(level=logging.INFO) # 控制程序只打印INFO级别
# # 对其他debug、warning、error不起作用
# s = '0'
# n = int(s)
# logging.info('n = %d' % n)
# print(10 / n)
# 4、pdb
# 使用 pdf.set_trace() 设置断点
# import pdb
# s = '0'
# n = int(s)
# pdb.set_trace() # 执行暂停,用(p 变量名)查看变量,c继续运行,n单步执行,q结束
# print(10/n)

# 单元测试,编写类似dict类
# class Dict(dict):
#     def __init__(self, **kw):
#         super().__init__(**kw)
#     def __getattr__(self, key):
#         try:
#             return self[key]
#         except KeyError:
#             raise AttributeError(r"'Dict' object has no attribute '%s'" % key)
#     def __setattr__(self, key, value):
#         self[key] = value
# # 编写该单元测试模块:mydict_test.py
# import unittest
# from mydict import Dict
# class TestDict(unittest.TestCase):
#     def setUp(self): # 开始处理函数,可以连接数据库
#         print('setUp...')
#     def test_init(self):
#         d = Dict(a=1, b='test')
#         self.assertEqual(d.a, 1)
#         self.assertEqual(d.b, 'test')
#         self.assertTrue(isinstance(d, dict))
#     def test_key(self):
#         d = Dict()
#         d['key'] = 'value'
#         self.assertEqual(d.key, 'value')
#     def test_attr(self):
#         d = Dict()
#         d.key = 'value'
#         self.assertTrue('key' in d)
#         self.assertEqual(d['key'], 'value')
#     def test_keyerror(self):
#         d = Dict()
#         with self.assertRaises(KeyError):
#             value = d['empty']
#     def test_attrerror(self):
#         d = Dict()
#         with self.assertRaises(AttributeError):
#             value = d.empty
#     def tearDown(self): # 处理结束函数,可以关闭数据库操作
#         print('tearDown...')
# if __name__ == '__main__':
#     unittest.main() # 执行测试
# $ python -m unittest mydict_test # 推荐使用命令行一次批量运行

# 文档注释 doctest
# def abs(n):
#     '''
#     Function to get absolute value of number.
#     Example:
#     >>> abs(1)
#     1
#     >>> abs(-1)
#     1
#     >>> abs(0)
#     0
#     '''
#     return n if n >= 0 else (-n)
# mydict2.py
# class Dict(dict):
#     '''
#     Simple dict but also support access as x.y style.
#     >>> d1 = Dict()
#     >>> d1['x'] = 100
#     >>> d1.x
#     100
#     >>> d1.y = 200
#     >>> d1['y']
#     200
#     >>> d2 = Dict(a=1, b=2, c='3')
#     >>> d2.c
#     '3'
#     >>> d2['empty']
#     Traceback (most recent call last):
#         ...
#     KeyError: 'empty'
#     >>> d2.empty
#     Traceback (most recent call last):
#         ...
#     AttributeError: 'Dict' object has no attribute 'empty'
#     '''
#     def __init__(self, **kw):
#         super(Dict, self).__init__(**kw)
#     def __getattr__(self, key):
#         try:
#             return self[key]
#         except KeyError:
#             raise AttributeError(r"'Dict' object has no attribute '%s'" % key)
#     def __setattr__(self, key, value):
#         self[key] = value
# if __name__=='__main__':
#     import doctest
#     doctest.testmod()

在这里插入图片描述
学习笔记day8

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值