'2/15'
-> track = 2, num_tracks = 15
'7'
-> track = 7, num_tracks = None
用Python做到这一点的优雅方法是什么?例如:
track, num_tracks = track_info.split('/')
这适用于第一种格式,但不适用于第二种格式,从而引发ValueError:需要多个值来解压。所以我想出了这样的方法:
#1 楼
try:
track, num_tracks = track_info.split('/', 1)
except:
track, num_tracks = track_info, None
老实说,这不是一个糟糕的解决方案。但是您几乎永远不要使用
except:
;您应该捕获特定的异常。这是另一种方法:
tracks, _, num_tracks = text.partition('/')
return int(tracks), int(num_tracks) if num_tracks else None
评论
\ $ \ begingroup \ $
我将删除参数maxsplit = 1进行拆分。如果文本包含多个'/',则报错是一件好事。
\ $ \ endgroup \ $
– Emanuele Paolini
2014年8月10日18:05
#2 楼
这可能过于笼统,但可以重用。它通过使序列足够长以适合请求的长度来“填充”序列,并根据需要添加给定填充项目的重复次数。因此,如果没有第二个元素,则其想法是将其扩展为2个元素,并且都为None:
def right_pad(length, seq, padding_item=None):
missing_items = length - len(seq)
return seq + missing_items * [ padding_item]
#3 楼
您可以使用默认值连接数组。track, num_tracks = (track_info.split('/', 1) + [None])[:2]
评论
除了不要使用裸露的东西;仅捕获特定的异常。您会惊讶地发现,除了语句外,还有多少个错误可以被一揽子掩盖。