# 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()
廖雪峰Python学习笔记day7
最新推荐文章于 2025-07-31 16:13:19 发布