2012-10-14 82 views
5

我有以下Python代碼:Python如何在分隔符不存在時處理分割?

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

    return buildfile, target 

,預計形式buildfile#target的字符串(argv[1]),並將其分成了兩個同名的變量。所以像「my-buildfile#some-target」這樣的字符串將分別分解爲my-buildfilesome-target

雖然有時候不會有「#」和目標;有時你只需要「my-buildfile」,在這種情況下,我只想目標爲「」(空)。

我該如何修改這個函數,以便它能夠處理「#」不存在的實例,並返回帶有空目標的構建文件?

目前,如果我通過只是構建文件,它拋出一個錯誤:

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

提前感謝!

+0

使用鴨子打字,嘗試做你想要的,並捕捉異常。 –

+0

感謝您的建議,但鴨子打字是什麼? – IAmYourFaja

+0

鴨打字是最適合Python程序的編程技術之一,只是谷歌「python鴨打字」。 –

回答

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 
8

我會用顯而易見的方法:

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

請注意,當buildDescriptor中有多個「#」時,這也會拋出一個Exception(這通常是一個GOOD東西!)

2
>>> buildfile, _, target = "hello#world".partition("#") 
>>> buildfile, target 
('hello', 'world') 
>>> buildfile, _, target = "hello".partition("#") 
>>> buildfile, target 
('hello', '') 
+0

+1,.partition()在這裏看起來非常優雅(除了虛擬變量),但當有多個「#」時它可能會表現出奇怪的(未被注意到)。 – ch3ka

相關問題