热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

第十九天-类的约束、异常处理与日志记录

本文介绍了如何通过类的约束来确保代码的一致性,以及如何使用异常处理和日志记录来提高代码的健壮性和可维护性。具体包括抛出异常、使用抽象类和方法,以及异常处理和日志记录的详细示例。
### 类的约束 #### 为什么需要类的约束? 在开发过程中,团队成员可能会编写不同的类来实现相同的功能。为了确保代码的一致性和可维护性,我们需要对这些类进行约束,确保每个类都实现了必要的方法。 #### 示例:贴吧登录 假设我们需要实现一个贴吧登录功能,不同的开发人员可能会有不同的实现方式。例如: ```python # 张三版 class Normal: def login(self): print("普通账号登录") # 李四版 class Member: def login(self): print("吧务账号登录") # 王二版 class Admin: def denglu(self): print("管理员登陆") # 项目经理调用 def login(obj): obj.login() n = Normal() login(n) m = Member() login(m) a = Admin() login(a) # 报错 'Admin' object has no attribute 'login' ``` 为了避免这种调用失败的情况,我们需要对类的结构进行约束。 ### 方法一:抛出异常 可以通过定义一个基类,并在基类中抛出异常来强制子类实现特定的方法。 ```python class Base: def login(self): raise NotImplementedError("子类没有实现该方法") # 张三版 class Normal(Base): def login(self): print("普通账号登录") # 李四版 class Member(Base): def login(self): print("吧务账号登录") # 王二版 class Admin(Base): def login(self): print("管理员登陆") # 项目经理调用 def login(obj): obj.login() n = Normal() login(n) m = Member() login(m) a = Admin() login(a) ``` ### 方法二:使用抽象类和方法 可以使用Python的`abc`模块来定义抽象类和方法,从而强制子类实现特定的方法。 ```python from abc import ABCMeta, abstractmethod class Base(metaclass=ABCMeta): @abstractmethod def login(self): pass def hehe(self): print("呵呵呵") # 张三版 class Normal(Base): def login(self): print("普通账号登录") # 李四版 class Member(Base): def login(self): print("吧务账号登录") # 王二版 class Admin(Base): def login(self): print("管理员登陆") # 项目经理调用 def login(obj): obj.login() n = Normal() login(n) m = Member() login(m) a = Admin() login(a) ``` ### 异常处理 在Python中,可以使用`try...except`语句来处理异常,确保程序在遇到错误时能够继续运行。 ```python try: print(1/0) # 0不能做除数 ZeroDivisionError: division by zero except ZeroDivisionError as z: print("错了. 除数不能为0") import traceback def cul(a, b): if (type(a) == int or type(a) == float) and (type(b) == int or type(b) == float): return a + b else: raise Exception("我要的不是这个. 你应该我传递int或者float") try: print(cul(1, 2)) print(cul(1, "疙瘩汤")) except Exception as e: print(traceback.format_exc()) # 获取堆栈信息 print("有误") ``` ### 日志记录 日志记录是调试和维护程序的重要工具。可以使用Python的`logging`模块来记录日志。 ```python import logging # 简单配置logging logging.basicConfig(filename='x1.log', format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S', level=logging.WARNING) logging.critical("我是critical") logging.error("我是error") logging.warning("我是warning") logging.info("我是info") logging.debug("我是debug") logging.log(1, "我什么都不是") # 例子,接上面 import traceback try: print(1/0) except Exception: logging.error(traceback.format_exc()) # 用法 print("出错了") # 把日志文件分开 FileHandler file_handler = logging.FileHandler('l1.log', 'a', encoding='utf-8') file_handler.setFormatter(logging.Formatter(fmt='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s')) logger1 = logging.Logger('A系统', level=logging.ERROR) logger1.addHandler(file_handler) logger1.error('我是A系统') file_handler2 = logging.FileHandler('l2.log', 'a', encoding='utf-8') file_handler2.setFormatter(logging.Formatter(fmt='%(asctime)s - %(name)s -%(levelname)s -%(module)s: %(message)s')) logger2 = logging.Logger('B系统', level=logging.ERROR) logger2.addHandler(file_handler2) logger2.error('我是B系统') ``` ### 总结 1. **抛出异常**:通过在基类中抛出`NotImplementedError`来强制子类实现特定的方法。 2. **使用抽象类**:通过`abc`模块定义抽象类和方法,确保子类实现特定的方法。 3. **异常处理**:使用`try...except`语句来处理程序中的异常,确保程序的健壮性。 4. **日志记录**:使用`logging`模块记录日志,帮助调试和维护程序。
推荐阅读
author-avatar
xinlang138438
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有