【发布时间】:2014-07-21 16:13:28
【问题描述】:
perl 的// 运算符的python 模拟是什么?
在 perl 中,可以执行以下操作:
$pos = $some_list[0] // 1
你如何在 python 中完成同样的事情?
【问题讨论】:
perl 的// 运算符的python 模拟是什么?
在 perl 中,可以执行以下操作:
$pos = $some_list[0] // 1
你如何在 python 中完成同样的事情?
【问题讨论】:
在 Python 中 没有undefined;相反,如果您尝试访问列表中不存在的索引,则会出现异常。因此,您可以改用异常处理:
try:
pos = some_list[0]
except IndexError:
pos = 1
对于序列的第一个元素,您可以将序列显式测试为布尔值(python 容器在为空时为“假”):
post = some_list[0] if some_list else 1
【讨论】:
如何使用异常?
try:
pos = some_list[0]
except (NameError, IndexError):
pos = 1
【讨论】:
上述字典的 try/catch 答案的替代方法是 .get() 上的默认参数:
param_value = my_dictionary.get(param_key, default_value)
【讨论】:
{...} 代替。
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
【讨论】: