2013-10-21 137 views
0

我使用下面的代碼:的Python:繼續循環

from bs4 import BeautifulSoup 

soup = BeautifulSoup (open("43rd-congress.htm")) 

final_link = soup.p.a 
final_link.decompose() 

trs = soup.find_all('tr') 

for tr in trs: 
    for link in tr.find_all('a'): 
     fulllink = link.get ('href') 
     print fulllink #print in terminal to verify results 

tds = tr.find_all("td") 

try: 
     names = str(tds[0].get_text()) 
    years = str(tds[1].get_text()) 
    positions = str(tds[2].get_text()) 
    parties = str(tds[3].get_text()) 
    states = str(tds[4].get_text()) 
    congress = tds[5].get_text() 

except: 
    print "bad tr string" 
    continue 


    print names, years, positions, parties, states, congress 

而且我得到以下錯誤:

SyntaxError: 'continue' not properly in loop. 

這是爲什麼?我檢查了縮進和冒號。感謝您的幫助提前。

+3

您的代碼的縮進看起來不正確。你在混合製表符和空格嗎? – Blender

+0

'繼續'關鍵字應該在循環中。你想在這裏做什麼? – yakiang

+0

@yakiang我想打印出它的名字,年份,職位,政黨,州議會。「但是,當我刪除繼續時,我收到28行上的打印錯誤。 這有道理嗎? 我正在使用本教程... http://jeriwieringa.com/blog/2012/11/04/beautiful-soup-tutorial-part-1/ –

回答

4

有幾件事。

首先,continue用於在一段時間或for循環中告訴循環跳到下一次迭代。你在哪裏使用它,在try/except塊中,不起作用。你可能會想的pass,但你只需要,如果你正在嘗試做這樣的事情:

try: 
    # Code with potential error 
except ErrortoCatch: 
    pass 

如果你想有一個縮進塊,而不是在它做任何事情。在這裏,這意味着你想要捕捉異常,但不要做任何事情。

你有一些縮進錯誤和古怪,就像事實上名字被意外縮進了一個額外的水平。這可能是因爲你有混合標籤(擴展到8個空格)和空格(你應該使用4個)。 PEP 8說你應該使用4個空格縮進,建議你應該遵循。

什麼是大概導致你的錯誤是你使用一個光禿禿的except:,這幾乎是一個不錯的主意。當你使用try/except塊時,你應該總是知道你正在尋找什麼錯誤,所以當你只是想處理一些特定的異常時,你不會意外地掩蓋真正的錯誤。值得注意的是,except:也捕獲了像KeyboardInterrupt這樣的東西,你真的,真的不想抓到。

我認爲正在發生的是try塊中的某個操作正在導致一個錯誤,該錯誤導致該變量因某種原因不可打印。這可能是很多事情,所以你應該指定你在except聲明中試圖處理的錯誤,然後找出你需要修復的其他錯誤。

此外,函數名稱與其調用之間不得有空格,例如, link.get ('href') =>link.get('href')

0

continue只允許在for或while循環中。你已經把它放在except。我想你可能會做出錯誤的縮進或誤解continue