我有一个我在python中创建的库,有些条目设置为除法的结果。不幸的是,有时这个分母是零
var1 = 5
var2 = 0
mylib = {}
try:
mylib['test1'] = 5
mylib['test2'] = var1 / var2
mylib['test3'] = 6
except:
mylib['test2'] = 0.0
print mylib
在这种情况下,'test3'
案例永远不会运行。有没有办法强制将'test2'
行设为默认值并继续'test3'
?
您还会注意到我在这里硬编码'test2'
是问题儿童。有没有办法知道哪条线路出现故障?
编辑我希望尽可能避免的一个可能的解决方案是单独为字典中的每个变量try
做一次,但我想避免如果可能的话
答案 0 :(得分:3)
创建一个函数。
def safediv(x,y):
try:
return x/y
except ZeroDivisionError:
return None
mylib['test1'] = 5
mylib['test2']=safediv(var1,var2)
mylib['test3'] = 6
答案 1 :(得分:2)
我不愿意使用try
语句。如果您充分意识到var2
可能为零的可能性,那么您可以捕获ZeroDivisionError
,您可以简单地编写一个条件表达式来处理它作为特例:
var1 = 5
var2 = 0
mylib = {}
mylib['test1'] = 5
mylib['test2'] = var1 / var2 if var2 else 0.0
mylib['test3'] = 6
print my lib
作为使用try/except
语句的一般规则,try
子句应包含可被视为成功或失败的代码。
答案 2 :(得分:1)
您可以将每个操作包装在try/except
中,或者将覆盖范围推送到@trvrm建议的函数中,以避免重复使用多个try/except
块。
我认为你不需要try / except
阻止。如果您知道0
可能是有效且有效的输入,请使用if / else
来处理它。异常处理是针对真正特殊的情况,而不是可以完全预测会发生这种情况的情况。
我建议,至少作为起点,替换:
mylib['test2'] = var1 / var2
...与:
if var2 == 0
mylib['test2'] = 0.0
else
mylib['test2'] = var1 / var2
我想我的问题是,"好老if/else
有什么问题?"