经典的“请求宽恕而不是允许”示例是从dict可能不存在的a 中访问值。例如:
names = { 'joe': 'Joe Nathan', 'jo': 'Jo Mama', 'joy': 'Joy Full' }name = 'hikaru'try: print names[name]except KeyError: print "Sorry, don't know this '{}' person".format(name)
在此说明了可能发生的异常(KeyError),因此你并不是在请求所有可能发生的错误的宽恕,而只是要求自然发生的错误。为了进行比较,“先问权限”方法可能类似于:
if name in names: print names[name]else: print "Sorry, don't know this '{}' person".format(name)要么real_name = names.get(name, None)if real_name: print real_nameelse: print "Sorry, don't know this '{}' person".format(name)
这样的“请求宽恕”的例子通常太简单了。IMO尚不十分清楚
try/ except块本质上优于
if/ else。当执行可能以各种方式失败的 *** 作时,例如解析, *** 作, *** 作, *** 作等,真正的价值要清晰得多。使用
eval(); 访问 *** 作系统,中间件,数据库或网络资源;或执行复杂的数学。当存在多种潜在的故障模式时,为获得原谅做好准备非常有价值。
有关代码示例的其他说明:
你无需在每个变量用法周围都进行浇注try/ except阻止。那太可怕了。而且你不需要设置self.bar,
__init__()因为它已在class上面的定义中设置。通常在类中定义它(如果它的数据很可能在该类的所有实例之间共享)或在中定义
__init__()(如果它是实例数据,特定于每个实例)。
None顺便说一下,值并非是未定义的或错误。这是一个特定且合法的值,表示无,无,空或无。许多语言都有这样的值,因此程序员不会“重载”
0,“ -1,''(空字符串)或类似的有用值。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)