Python表达式失败时存储默认值的方法

时间:2014-07-21 16:13:28

标签: python shortcut

perl的//运算符的python模拟是什么?

在perl中,人们可以做类似的事情:

$pos = $some_list[0] // 1

你如何在python中完成同样的工作?

4 个答案:

答案 0 :(得分:3)

在Python中,不是undefined ;相反,如果您尝试访问列表中不存在的索引,则会出现异常。因此,您可以使用异常处理:

try:
    pos = some_list[0]
except IndexError:
    pos = 1

对于序列的第一个元素,您可以将序列显式地测试为布尔值(python容器是'假的'当为空时):

post = some_list[0] if some_list else 1

答案 1 :(得分:2)

如何使用例外?

try:
    pos = some_list[0]
except (NameError, IndexError):
    pos = 1

答案 2 :(得分:2)

python中的最佳实践是使用try,except子句显式处理异常。这里提供的一个例子可以帮助您进行视觉化

my_list = []
try:
    item = my_list[1]
except IndexError:
    item = 1

此处代码执行并引发异常,因为索引“1”超出范围。然后我们继续处理该异常并设置item=1以允许程序继续运行。这种显式处理异常的原因是程序员正确看到导致我们问题的原因。以此为例:

my_list = [0]
try:
    item = 1/my_list[0]
except IndexError:
    item = 1

这会引发零分割错误(停止执行),让我们知道我们需要在我们预期的原始异常IndexError之外显式处理一些其他异常。然后我们可能会做这样的事情来处理这种情况:

my_list = [0]
try:
    item = 1/my_list[0]
except IndexError:
    item = 1
except ZeroDivisionError:
    item = 99999

try-except块还有一些我们可以利用的其他值得注意的功能:

try:
    # code which might raise error
    pass
except IndexError as err:
    # handling an index error and storing the traceback in err
    pass
except ZeroDivisionError:
    #handling some other error:
    pass
else:
    # code we would like to execute if the try block succeeds without any errors
    pass
finally:
    # code we will execute regardless of what occurs in the entire 
    # try,except,else block listed above (i.e we can ensure a file is closed)
    pass 

答案 3 :(得分:2)

上面针对词典的try / catch答案的替代方法是.get()上的默认参数:

param_value = my_dictionary.get(param_key, default_value)