字典实例化的条件值

时间:2014-09-15 20:35:38

标签: python dictionary

我有一个我在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做一次,但我想避免如果可能的话

3 个答案:

答案 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)

选项1

您可以将每个操作包装在try/except中,或者将覆盖范围推送到@trvrm建议的函数中,以避免重复使用多个try/except块。

选项2

我认为你不需要try / except阻止。如果您知道0可能是有效且有效的输入,请使用if / else来处理它。异常处理是针对真正特殊的情况,而不是可以完全预测会发生这种情况的情况。

我建议,至少作为起点,替换:

mylib['test2'] = var1 / var2

...与:

if var2 == 0
    mylib['test2'] = 0.0
else
    mylib['test2'] = var1 / var2

我想我的问题是,"好老if/else有什么问题?"