如何在Python中组合多个try和except
我有一个列表,它有时包含一个值,有时包含2或3个值。我将每个值分配给一个变量。如果列表的指定位置没有值,我希望它是一个空变量。我有什么办法可以提高效率吗如何在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
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的声誉。