如何在Python中组合多个try和except

4

我有一个列表,有时只包含一个值,有时包含2-3个值。我需要将每个值分配给一个变量。如果列表中指定位置没有值,我希望把它分配为空的变量。是否有更有效率的方法来实现这个目标?

split = line.split(',')
try:
    var1 = split[0]
except IndexError:
    var1 = None
    
try:
    var2 = split[1]
except IndexError:
    var2 = None

try:
    var3 = split[2]
except IndexError:
    var3 = None

听起来像是使用dict的用法。你不能使用dict来存储这些值,而不是将它们存储在单独的变量中吗? - Moinuddin Quadri
1
相关:我如何创建可变变量? - wjandrea
1
这个回答解决了你的问题吗?一个代码块中有多个try代码 - Always Greg
1
var1,var2,var3 =(split + [None] * 3)[:3] - ekhumoro
如果line是一个字符串,那么split[0]将始终存在。所以你期望一个IndexError的原因是什么?例如,''.split(',')-> [''] - wjandrea
3个回答

1
split = line.split(',')
variables = [None, None, None]


for i in range(len(split)):
        variables[i] = split[i]

var1, var2, var3 = variables

编辑(在 @ekhumoro 之后):

split = line.split(',')
variables = [None, None, None]
variables[:len(split)] = split
var1, var2, var3 = variables

2
vars[:len(split)] = split. - ekhumoro
vars()是Python内置函数,因此最好使用不同的名称以避免变量名冲突。参考这个问题:TypeError: 'list' object is not callable in python - wjandrea

0

您可以使用带有条件检查的生成器表达式(或列表推导式)来查看索引是否存在于列表中。如果存在,则返回该索引处的元素,否则返回None。在这里,我将我的生成器表达式限制为返回n(在您的情况下为3)个值,并且您可以解包并保存这些值在n个变量中。

例如:

my_list = [1] # List with just one element
n = 3  # Number of variables in which you want to fill the values

var1, var2, var3 = (my_list[i] if i < len(my_list) else None for i in range(n))

print(var1, var2, var3)
# prints: (1, None, None)

请参考生成器表达式和列表推导式以获取更多详细信息。


@pcct2019 这个答案和其他答案对你有帮助吗?如果有,请点击答案左侧的“向上箭头”来点赞。你也可以通过点击“打勾图标”来标记最佳答案。这将为回答者带来声誉增长,每个点赞+10分,被接受的答案+15分。 - Moinuddin Quadri

0

根据你实际想要达到的目标,最好不要使用单独变量。例如,你可以使用dict.get(),如果字典中没有给定的键,则返回None

for line in 'a,b,c', 'd,e', 'f':
    split = line.split(',')
    d = {i: v for i, v in enumerate(split)}
    print(d, ' -> ', d.get(0), d.get(1), d.get(2))

输出:

{0: 'a', 1: 'b', 2: 'c'}  ->  a b c
{0: 'd', 1: 'e'}  ->  d e None
{0: 'f'}  ->  f None None

你也可以考虑使用解包:

for line in 'a,b,c', 'd,e', 'f':
    var1, *others = line.split(',')
    print(var1, others)

输出:

a ['b', 'c']
d ['e']
f []

顺便提一下,注意到split[0]总是存在的,所以我不确定你为什么期望一个IndexError。例如:
>>> ''.split(',')
['']

* 在如何创建变量变量?中可以看到一些相关的想法,更广泛地,如何避免XY问题


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接