3
我不是程序員,所以非常愚蠢的Python問題在這裏。Python:如何在發生外部異常時正確地繼續while循環
所以,我有一個腳本,批量檢查域名列表的whois信息。這裏有一個小例子來說明我的問題:
import pythonwhois as whois
domainList = ['aaaa', 'bbbb', 'ccccc', 'example.com']
def do_whois(domain):
try:
w = whois.get_whois(domain)
print 'Everything OK'
return w
except:
print 'Some error...'
whois_loop()
def whois_loop():
while domainList:
print 'Starting loop here...'
domain = domainList.pop()
w = do_whois(domain)
print 'Ending loop here...'
whois_loop()
腳本的使用有效域的輸出是:
Starting loop here...
Everything OK
Ending loop here...
Starting loop here...
Some error...
Starting loop here...
Some error...
Starting loop here...
Some error...
Ending loop here...
Ending loop here...
Ending loop here...
我的目標是:
- 當do_whois()函數失敗(由於 示例中的域無效),whois_loop()應該繼續從下一個域開始。
我不明白:
- 爲什麼while_loop()似乎W = do_whois(域)線後繼續執行時,有上do_whois() 功能的異常?因爲它打印出'Ending loop here ...'而沒有 'Starting loop here ...',但我不明白爲什麼這個 發生。 while循環不應該到達那條線,如果有一個 異常(但當然我錯了)。
我能解決這個把一個如果在while_loop()爲例條件:
w = do_whois(domain)
if not w:
continue
print 'Ending loop here...'
這將打印:
Starting loop here...
Everything OK
Ending loop here...
Starting loop here...
Some error...
Starting loop here...
Some error...
Starting loop here...
Some error...
或者其他方式,但我嘗試要了解這裏是爲什麼我在做什麼是錯誤的?我明顯錯過了一些東西。
我讀過一些類似的問題和外部資源,但沒有找到明確的解釋爲什麼我試圖做的不起作用。
謝謝!
「我不是程序員」 - 是的,你是!你寫代碼。 –
你有沒有嘗試在while循環中嘗試'except'?打印錯誤後,您可以「繼續」。 –
另請注意,將錯誤處理移至while循環後,您無需從do_whois內部調用whois_loop。 –