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

如何在Python中组合多个try和except,python,list,Python,List,我有一个列表,它有时包含一个值,有时包含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

我有一个列表,它有时包含一个值,有时包含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
可以将生成器表达式(或列表理解)与条件检查一起使用,以查看列表中是否存在索引。如果存在,则返回该索引处的元素,否则返回
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)
>>> ''.split(',')
['']
my_list=[1]#只包含一个元素的列表
n=3#要填充值的变量数
var1,var2,var3=(如果我
有关更多详细信息,请参阅

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


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

var1, var2, var3 = variables
编辑(在@ekhumoro之后):


根据您实际要完成的工作*,最好不要使用单个变量。例如,可以使用,如果给定的键不在dict中,则返回
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
a ['b', 'c']
d ['e']
f []

也可以考虑使用拆封:

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

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

顺便说一句,请注意,
split[0]
将始终存在,因此我不确定您为什么希望使用
索引器。例如:

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)
>>> ''.split(',')
['']

*请参阅和更广泛地了解一些相关的想法,

听起来像是使用了
dict
。你不能用
dict
来存储这些值,而不是将它们存储在单独的变量中吗?相关:这回答了你的问题吗
var1、var2、var3=(split+[None]*3)[:3]
。如果
line
是字符串,
split[0]
将始终存在。那么,您希望出现
索引器的原因是什么呢?例如,
'.split(',)
->
['']
vars[:len(split)]=split
。是一个内置的,所以最好使用不同的名称,以避免阴影。C.f.这个问题:@wjandrea完成了@pcct2019此答案和其他答案对您有帮助吗?如果是,请点击答案左侧的“向上”箭头向上投票。您还可以通过点击“勾选”图标将最佳答案标记为已接受。它有助于回答者在每次投票中获得+10的声誉,在被接受的答案中获得+15的声誉。