gpt4 book ai didi

Python:发生外部异常时如何正确继续while循环

转载 作者:行者123 更新时间:2023-11-28 18:44:38 26 4
gpt4 key购买 nike

我不是程序员,所以这里是非常愚蠢的 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...

我的目标是:

  • 当 do_whois() 函数失败时(因为域名无效)例如),whois_loop() 应该从下一个域开始继续。

我不明白的地方:

  • 为什么当 do_whois() 出现异常时 while_loop() 似乎在 w = do_whois(domain) 行之后继续执行函数? 因为它打印出“在这里结束循环...”而没有'在这里开始循环......',但我不明白为什么会这样发生。如果有一个 while 循环不应该到达那条线异常(exception)(当然我错了)。

我可以解决这个问题,例如在 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...

或其他方式,但我在这里想了解的是为什么我做的是错的?我显然遗漏了一些东西。

我已经阅读了一些类似的问题和外部资源,但没有找到关于为什么我尝试做的事情不起作用的明确解释。

谢谢!

最佳答案

当你得到一个错误时,你从 do_whois 中再次调用 whois_loop(),这意味着你可以结束几个深度递归调用,因此多个 “在这里结束循环...”。这是不必要的。一旦 do_whois 返回,循环将继续,无论您是否处理了其中的错误(实际上,在函数内部“安静地”处理错误的要点是调用函数不必了解它)。

相反,尝试:

def do_whois(domain):
try:
w = whois.get_whois(domain)
except:
print 'Some error...'
else:
print 'Everything OK'
return w

(请注意,最好在 try 中包含尽可能少的内容;如果没有出现错误,则 else 部分会运行,因此您可以在那里继续。)

关于Python:发生外部异常时如何正确继续while循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21970319/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com