perl的//
运算符的python模拟是什么?
在perl中,人们可以做类似的事情:
$pos = $some_list[0] // 1
你如何在python中完成同样的工作?
答案 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)