17

私は次のPythonコードを持っています:

def split_arg(argv):
    buildDescriptor = argv[1]
    buildfile, target = buildDescriptor.split("#")

    return buildfile, target

argv[1]フォームの文字列()を想定し、buildfile#targetそれらを同じ名前の2つの変数に分割します。したがって、「my-buildfile#some-target 」のような文字列は、それぞれmy-buildfilesome-targetに分割されます。

ただし、「#」とターゲットがない場合もあります。「 my-buildfile 」がある場合もありますが、その場合は、ターゲットを「」(空)にします。

「#」が存在しないインスタンスを処理し、空のターゲットを持つビルドファイルを返すように、この関数を変更するにはどうすればよいですか?

現在、ビルドファイルだけを渡すと、エラーがスローされます。

buildfile, target = buildDescriptor.split("#")
ValueError: need more than 1 value to unpack

前もって感謝します!

4

4 に答える 4

17

私は明白なアプローチを使用します:

    buildfile, target = buildDescriptor.split("#") if \
                        "#" in buildDescriptor else \
                        (buildDescriptor, "")

これは、buildDescriptor に複数の「#」がある場合にも例外をスローすることに注意してください (これは一般的に良いことです!)。

于 2012-10-14T23:01:51.580 に答える
10

まず、分割の結果をリストに入れます。

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
于 2012-10-14T22:59:14.467 に答える
8
>>> buildfile, _, target = "hello#world".partition("#")
>>> buildfile, target
('hello', 'world')
>>> buildfile, _, target = "hello".partition("#")
>>> buildfile, target
('hello', '')
于 2012-10-15T00:46:14.863 に答える