我有以下python代码:
def split_arg(argv):
buildDescriptor = argv[1]
buildfile, target = buildDescriptor.split("#")
return buildfile, target
它需要一个argv[1]
形式的字符串(buildfile#target
),并将它们分成两个同名的变量。因此,像“ my-buildfile#some-target ”这样的字符串将分别分为 my-buildfile 和 some-target 。
有时候,不会有“#”和目标;有时候你只会有“ my-buildfile ”,在这种情况下我只想让 target 成为“”(空)。
如何修改此函数以便它将处理“#”不存在的实例并返回带有空目标的buildfile?
目前,如果我只传递构建文件,则会抛出错误:
buildfile, target = buildDescriptor.split("#")
ValueError: need more than 1 value to unpack
提前致谢!
答案 0 :(得分:10)
我会使用明显的方法:
buildfile, target = buildDescriptor.split("#") if \
"#" in buildDescriptor else \
(buildDescriptor, "")
请注意,当buildDescriptor中存在多个“#”时,这也会抛出异常(这通常是一件好事!)
答案 1 :(得分:6)
首先,将拆分结果放在一个列表中:
split_build_descriptor = buildDescriptor.split("#")
然后检查它有多少元素:
if len(split_build_descriptor) == 1:
buildfile = split_build_descriptor[0]
target = ''
elif len(split_build_descriptor) == 2:
buildfile, target = split_build_descriptor
else:
pass # handle error; there's two #s
答案 2 :(得分:4)
>>> buildfile, _, target = "hello#world".partition("#")
>>> buildfile, target
('hello', 'world')
>>> buildfile, _, target = "hello".partition("#")
>>> buildfile, target
('hello', '')
答案 3 :(得分:0)
您可以在Python 3中做到这一点
input_string = 'this is a test'
delimiter = '#'
slots = input_string.split(delimiter)
if slots[0] == input_string:
print('no %s found' % delimiter)
else:
print('%s found right after \"%s\"' % (delimiter, slots[0]))