博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
约束和自定义异常
阅读量:5309 次
发布时间:2019-06-14

本文共 3489 字,大约阅读时间需要 11 分钟。

约束

用来约束xx类的其派生类,保证派生类中必须编写有xxx方法,不然执行就会报错

Python中

语法:主动抛出异常

可以是 raise Exception(xxx)这个其实也是可以的,但不是很专业;专业的写法: raise NotImplendError(xxx)

1 class BaseMessage(object): 2     def send(self): 3         """ 4         必须继承BaseMessage,然后其中必须编写send方法。用于完成具体业务逻辑。 5         """ 6         raise NotImplementedError(".send() 必须被重写.") 7     # raise Exception(".send() 必须被重写.") 8     def func(self): 9         pass10     def func_1(self):11         pass12 class Foo(BaseMessage):13     14     def send(self):15         """这个send方法时必须要有的,因其父类约束了此方法,其他方法可有可无"""16         pass
示例

Java和C#中

接口,接口中不允许在方法内部写代码,只能约束继承它的类必须实现接口中定义的所有方法,一个类可以实现多个接口

interface IFoo:  # 接口  # 方法内部不可写代码    def f1(self, x1):     # 接口中的方法    pass    def f2(self, x1):     # 接口中方法        passinterface IBar:    # 接口    def f3(self, x1):     #接口中的方法        pass            def f4(self, x1):     # 接口中的方法        pass    class Foo(IFoo, IBar):  # 实现了2个接口,上述2个接口中的方法都要在这实现    def f1(self, x1):        pass    def f2(self, x1):         pass    def f3(self, x1):         pass    def f4(self, x1):         pass
示例

抽象类和抽象方法约束

需要引入库abc中ABCmeta类和abstractmethod类

定义:

抽象类:class 类(metaclass = ABCMeta)或__metaclass__ = ABCMeta

抽象方法:方法上方加@abstractmethod装饰器

from abc import ABCMeta,abstractmethod # 引入模块class Base(metaclass=ABCMeta): # 抽象类    def f1(self):        print(123)    @abstractmethod    def f2(self):   # 抽象方法        passclass Foo(Base):     def f2(self):    # 必须要有        print(666)
示例

应用场景:多个类,内部都必须有某些方法时,需要是有基类+异常进行约束

自定义异常处理

定义异常类+主动抛出异常+捕获异常

1  # 自定义异常类 2 class MyException(Exception): 3     def __init__(self, code, msg): 4         self.code = code 5         self.msg = msg 6  7 try: 8     # 主动抛出异常  9     raise MyException(1000, '操作异常')10 11 except KeyError as obj:12     print(obj, 1111)13 except MyException as obj:  # 捕获异常 14     print(obj, 2222)15 except Exception as obj:16     print(obj, 3333)
View Code
1 import os 2  3 class ExistsError(Exception): 4     pass 5  6 class KeyInvalidError(Exception): 7     pass 8  9 def new_func(path,prev):10     """11     去path路径的文件中,找到前缀为prev的一行数据,获取数据并返回给调用者。12         1000,成功13         1001,文件不存在14         1002,关键字为空15         1003,未知错误16         ...17     :return:18     """19     response = {
'code':1000,'data':None}20 try:21 if not os.path.exists(path):22 raise ExistsError() # 主动抛出异常123 24 if not prev:25 raise KeyInvalidError() # 主动抛出异常226 pass27 except ExistsError as e: # 捕捉异常28 response['code'] = 100129 response['data'] = '文件不存在'30 except KeyInvalidError as e:31 response['code'] = 100232 response['data'] = '关键字为空'33 except Exception as e:34 response['code'] = 100335 response['data'] = '未知错误'36 return response37 38 39 def func(path,prev):40 """41 去path路径的文件中,找到前缀为prev的一行数据,获取数据并返回给调用者。42 1000,成功43 1001,文件不存在44 1002,关键字为空45 1003,未知错误46 ...47 :return:48 """49 response = {
'code':1000,'data':None}50 try:51 if not os.path.exists(path):52 response['code'] = 100153 response['data'] = '文件不存在'54 return response55 if not prev:56 response['code'] = 100257 response['data'] = '关键字为空'58 return response59 pass60 except Exception as e:61 response['code'] = 100362 response['data'] = '未知错误'63 return response
练习

 

转载于:https://www.cnblogs.com/--kai/p/9566882.html

你可能感兴趣的文章
Leetcode 589. N-ary Tree Preorder Traversal
查看>>
机器学习/深度学习/其他开发环境搭建记录
查看>>
xml.exist() 实例演示
查看>>
判断是否为空然后赋值
查看>>
zabbix监控日志文件
查看>>
正则表达式
查看>>
pip install torch on windows, and the 'from torch._C import * ImportError: DLL load failed:' s...
查看>>
环套树
查看>>
java基础(一):我对java的三个环境变量的简单理解和配置
查看>>
arcgis api 4.x for js 结合 Echarts4 实现散点图效果(附源码下载)
查看>>
YTU 2625: B 构造函数和析构函数
查看>>
apache自带压力测试工具ab的使用及解析
查看>>
C#使用Xamarin开发可移植移动应用(2.Xamarin.Forms布局,本篇很长,注意)附源码
查看>>
jenkins搭建
查看>>
C#中使用Split分隔字符串的技巧
查看>>
eclipse的调试方法的简单介绍
查看>>
加固linux
查看>>
IPSP问题
查看>>
10.17动手动脑
查看>>
WPF中Image显示本地图片
查看>>