我不是程序员,所以非常愚蠢的Python问题。
因此,我有一个脚本可以批量检查域列表的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...
我的目标是:
我不明白的事情:
我可以解决这个问题,在while_loop()上添加if条件,例如:
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...
或者其他方式,但我在这里想要理解的是为什么我做错了?我显然错过了什么。
我已经阅读了一些类似的问题和外部资源,但没有找到明确的解释为什么我要做的事情不起作用。
谢谢!
答案 0 :(得分:1)
当您收到错误消息时,您会再次从whois_loop()
内部调用do_whois
,这意味着您可以在深层结束多次递归调用,因此会有多个"Ending loop here..."
。这是不必要的。一旦do_whois
返回,循环将继续,无论你是否在其中处理了一个错误(事实上,在函数内“安静地”处理错误的点是调用函数不必知道它)。
相反,请尝试:
def do_whois(domain):
try:
w = whois.get_whois(domain)
except:
print 'Some error...'
else:
print 'Everything OK'
return w
(请注意,优良作法是在try
中尽可能少;如果没有引发错误,else
部分就会运行,因此您可以继续使用。)