2013-10-21 138 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