首页 / 知识
例外处理:合同与例外方法
2023-04-13 03:18:00

Exception handling: Contract vs Exceptional approach我知道两种处理异常的方法,让我们来看看它们。 合同方式。 当某个方法不执行其在方法标头中将要执行的操作时,它将引发异常。因此,该方法"承诺"它将执行该操作,并且如果由于某种原因而失败,则将引发异常。 出色的方法。 仅当发生真正奇怪的事情时才抛出异常。当您可以使用常规控制流(If语句)解决问题时,不应使用异常。您不会像在合同方法中那样将异常用于控制流。 让我们在不同情况下使用两种方法: 我们有一个Customer类,该类具有一种称为OrderProduct的方法。 合同方式:
特殊方法:
在这里,我更喜欢采用特殊的方法,因为如果客户没有赢得彩票,他就没有钱并不是真正的例外。 但是,我在合同风格上存在这种情况。 极好:
当我调用一个名为CreateCar的方法时,我该期望一个Car实例而不是一些糟糕的null指针,后者可能会在十行之后破坏我正在运行的代码。因此我更喜欢合同:
您使用哪种风格?您认为对异常的最佳通用方法是什么? 我赞成您所说的"合同"方法。在支持异常的语言中,无需返回null或其他特殊值以指示错误。当代码中没有很多" if(result == NULL)"或" if(result == -1)"子句以及非常简单,直接的逻辑时,我发现代码更容易理解。 我通常的方法是使用合同来处理由于"客户端"调用(即由于外部错误(即ArgumentNullException))引起的任何类型的错误。 参数上的每个错误都不会处理。引发异常,由"客户端"负责处理。另一方面,对于内部错误,请始终尝试更正它们(就像由于某种原因而无法获得数据库连接一样),并且只有在您无法处理它时才引发异常。 重要的是要记住,客户端始终无法处理此类级别的大多数未处理的异常,因此它们很可能会由最通用的异常处理程序处理,因此,如果发生此类异常,则无论如何您都可能是FUBAR。 两种方法都是正确的。这就是说,应该以这样一种方式来写合同:对于并非真正例外的所有情况,都指定不需要抛出异常的行为。 请注意,根据代码调用者的期望,某些情况可能会或可能不会例外。如果呼叫者期望字典中将包含某个项目,而没有该项目则表示存在严重问题,则找不到该项目是一种特殊情况,并且应引发异常。但是,如果调用者实际上不知道某个项目是否存在,并且同样准备处理该项目的存在或不存在,则该项目的缺失将是预期的情况,并且不会引起异常。处理呼叫者期望中的此类变化的最佳方法是让合同指定两种方法:DoSomething方法和TryDoSomething方法,例如
请注意,尽管标准的"尝试"模式如上所述,但是如果有人正在设计一个生成项目的接口,则某些替代方法也可能会有所帮助:
注意,在接口中使用类似普通的TryGetResult模式的东西会使接口相对于结果类型不变。使用上述模式之一将允许接口相对于结果类型协变。同样,它将允许在'var'声明中使用结果:
并不是完全标准的方法,但是在某些情况下,其优势可能是合理的。 如果您实际上对异常感兴趣,并想考虑如何使用它们来构建健壮的系统,请考虑阅读存在软件错误时制作可靠的分布式系统。 我相信,如果您要构建一个将由外部程序使用(或将由其他程序重用)的类,则应使用合同方法。一个很好的例子是任何一种API。 |
最新内容
相关内容
python中获取路径的三种方法
python中获取路径的三种方法,工作,代码,情况,培训,下来,路径,文件,也就是,桌面,目录,python中获取路径总结下来分为三种情况:1、获取工作目录python如何让程序暂停执行和继续执
python如何让程序暂停执行和继续执行?,暂停,培训,程序,继续,空格键,函数,以上,操作,方法,更多,python让程序继续执行的方法:一、使用到的函数python如何获取程序执行时间?
python如何获取程序执行时间?,代码,培训,标准,程序,方法,中间,使用方法,以上,手册,更多,python获取程序执行时间的方法:1、使用time.clock()方python列表有哪些常用方法?
python列表有哪些常用方法?,位置,方法,培训,列表,语法,元素,示例,对象,以上,参数,列表是最常用的Python数据类型,它可以作为一个方括号内的逗Python如何创建对象,有哪些方法
Python如何创建对象,有哪些方法,培训,对象,方法,内容,函数,属性,所在,以上,以下,功能,以下介绍Python创建对象的9种方法。classPoint:def__iniPython静态函数和普通方法的区别
Python静态函数和普通方法的区别,培训,方法,静态,区别,实例,函数,属性,结果,例子,下面,下面通过一个例子,讲解Python静态函数、普通方法、类方批处理怎么执行Python程序
批处理怎么执行Python程序,培训,方式,文件,程序,脚本,文件夹,路径,命令,以上,格式,批处理执行Python程序的方式:第一种方式:@echooffC:cdC:\Upython中什么是类方法
python中什么是类方法,培训,方法,实例,静态,定义,参数,函数,内部,变量,属性,python中的类方法,指的是在类中定义的函数,函数在类的内部称为方法python执行报错有哪些原因
python执行报错有哪些原因,时报,培训,横线,标点符号,错误,原因,目录,法名,程序,都会,python执行时报错,可能是以下的几种原因1、运行出现objecpython看类里有哪些方法
python看类里有哪些方法,信息,员工,培训,名称,方法,函数,冒号,字符串,语句,结尾,python使用class语句来创建一个新类,class之后为类的名称并以python怎么调用方法
python怎么调用方法,系统,培训,方法,参数,法名,定义,列表,实例,以上,函数,python调用的方法类的方法的定义1、定义一个类deffun_name(self,..python对象与方法的区别是什么
python对象与方法的区别是什么,地址,数据,培训,对象,函数,类型,字符串,方法,表示,身份,python使用对象模型来存储数据,也就是说构造任何类型的