2017-09-30 179 views
0

所以這是代碼即時提供和說明如下:)Python - For循環所有,然後打印?

r = s.get(Url) 
names = soup(r.text, 'html.parser') 
findName = names.find('div', {'class':'nameslist'}) 

if (r.status_code == 200): 


    for name in names.find_all('option'): 

      global nameID 

      if myName == foundName: 
       nameID = size.get('value') 
       print('Profile-1 Found name') 
       break 

      else: 
       print('Did not find name') 


    if (findName != None): 
     notepresent = True 
     print('There is a value') 
    else: 
     global addtonotes 
     notepresent = False 
     addtonotes = {'id': nameID} 
     add2notes(addtonotes) 

輸出

Did not find name 
Did not find name 
Did not find name 
Did not find name 
Did not find name 
Did not find name 
Did not find name 
Profile-1 Found name 

我要的是,它不應該說「找不到名稱」直到它通過循環遍歷所有名字,然後說它沒有找到任何名字。 但是它現在所做的是,它爲每個名稱逐個循環,直到找到名稱,然後我使用break來不再搜索其他名稱,因爲它不需要。

所以問題是我怎麼能把它打開,所以它會說沒有找到名稱時,它已經爲每個名稱循環,然後說沒有找到名稱後,它已通過所有名稱循環?

編輯:

所以每當它找到的名稱就會去addtonotes = {'id': nameID},然後它會被添加到addtonotes但它不發現則會有一個回溯說:

Did not find name 
Did not find name 
Did not find name 
Did not find name 
Did not find name 
Did not find name 
Did not find name 
Did not find name 
Did not find name 
Did not find name 
Traceback (most recent call last): 
    self._target(*self._args, **self._kwargs) 
    File "C:\Users\Test.py", line 153 
    addtonotes = {'id': nameID} 
NameError: name 'nameID' is not defined 

所以我也想要的是,當它沒有找到任何名稱時,它應該只使用Sys.exit(),但我現在不能在else語句中實現它,因爲它會通過第一個循環執行sys.exit ...

我希望有人認識這個問題:)

回答

1

最簡單的方法是之前設置nameID爲空值循環:

nameID = None 
for name in names.find_all('option'): 
    if myName == foundName: 
     nameID = size.get('value') 
     print('Profile-1 Found name') 
     break 

if nameID is None: 
    print('Did not find name') 

然而,Python的for循環實際上有專門的語法這案件;您可以將else:塊添加到for循環中。當for完成時,纔會執行,即在沒有break結束循環早期:

for name in names.find_all('option'): 
    if myName == foundName: 
     nameID = size.get('value') 
     print('Profile-1 Found name') 
     break 
else: 
    print('Did not find name') 
+0

哦。它有助於提升,但是現在發生的事情是,它說它找到了名字,但是也表示它沒有被發現。輸出將會顯示'''Profile-1 Found name - 沒有找到名字'''但是這是你做的第二次編輯。 – WeInThis

+0

@WeInThis:我發佈的代碼無法同時打印;要麼打印「Profile-1 Found name」,要麼執行「break」,要麼到達'else'塊。它不能做到這一點,因爲「break」。 –

+0

哦,哦。好吧,我確實嘗試了第一種解決方案,似乎即使沒有休息也能得到我想要的結果:)我認爲我可以將此標記爲已解決。我還不確定,但我會測試周圍,看看。到現在爲止還挺好! :) – WeInThis