2017-06-11 58 views
0

對不起,我提交了一個小問題,但是這讓我很煩。我有這樣的一行,這是永久給我的語法錯誤:一行if else語句拒絕工作

print(BDF) if header is 1 

我也試過這樣:

print(BDF) if (header == 1) 

下面是完整的功能:

def CSVtoDict(BDF, prune, header): 
    # Comes with the option to prune [] and to use headers 
    with open('%s%s.csv' % (dataDir,BDF), mode='r') as infile: 
     reader = csv.reader(infile) 
     saved = {} 
     for row in reader: 
      key = row[0] 
      saved[key] = [r for r in row[1:] if not (r is '' and prune is 1)] 
     print(BDF) if header is 1 
    return saved 

怎麼可能是造成這個?我打電話的功能與:

adsMut = CSVtoDict(BaseDataFiles[0],1,1) 

一切似乎是爲了,每次它只是給我語法錯誤。

+1

你爲什麼想成爲看上了'print'聲明?只要做最簡單直接的解決方案(約翰戈登的答案)。你花了多少時間來調試?任何閱讀單行解決方案的人都不得不懷疑你爲什麼這樣做。 – Akavall

+0

這是一條非常簡單的線條,使得兩行代碼不會使代碼更清晰(我認爲),並且會使代碼變得更長(線條上)。另外我想完善的基礎知識,因爲我進入更復雜的東西:) –

+0

我堅信使用三元條件運算符是不標準的;語法有點混亂,對吧?否則,你不會問這個問題。如果你使用'print(BDF)',如果header是1 else',如果條件不滿足,'None'將被打印出來,你想要嗎? – Akavall

回答

6

你必須提供else條款以及這一個班輪。以下行將工作:

print(BDF) if header is 1 else None 
+0

就是這樣,謝謝!我忘了你不能使用「pass」,而是在這些情況下不得不使用None。非常感謝你爲我節省了半個小時的挫折! :) –

6

您使用的單行if格式的任何特殊原因?更常見的格式是:

if header == 1: 
    print (BDF) 
+0

我想讓我的代碼更漂亮,但是單行格式拒絕工作:( –

+4

正如Ahsanul在上面回答的那樣,單行格式需要'else'。鑑於這種限制,我不確定它是否更漂亮 –

+0

你確定嗎?我寧願寫一個額外的東西,而不是一個額外的整行......也許這只是我 –

2
a if condition else b 

使用三元條件運算符蟒蛇