Python - 更好的循环解决方案 - 出现错误后重新运行并在 3 次尝试后忽略该错误
Posted
技术标签:
【中文标题】Python - 更好的循环解决方案 - 出现错误后重新运行并在 3 次尝试后忽略该错误【英文标题】:Python - better solution for loops - Re-run after getting a error & ignore that error after 3 attempts 【发布时间】:2017-10-22 08:40:44 【问题描述】:我在下面创建了 for 循环来运行一个函数来从 pandas 获取价格数据以获取代码列表。基本上,如果收到 RemoteDataError 并在 3 次尝试后忽略该错误,循环将重新运行该函数。
尽管下面的 for 循环为此目的工作正常,但我确实认为有更好的解决方案,因为我无法从下面的循环中定义尝试次数,例如在 for 循环之外放置一个 while 循环来表示尝试次数。我试图定义一个名为尝试= 0的变量,每次重新运行时,都会添加一次尝试。逻辑是尝试次数 += 1。如果尝试次数达到 3,请使用 continue 忽略错误。但是,它没有用。可能是我设置错误了。
for ticker in tickers:
print(ticker)
try:
get_price_for_ticker()
except RemoteDataError:
print('No information for '.format(ticker))
try:
get_price_for_ticker()
print('Got data')
except RemoteDataError:
print('1st with no data')
try:
get_price_for_ticker()
print('Got data')
except RemoteDataError:
print('2nd with no data')
try:
get_price_for_ticker()
print('Got data')
except RemoteDataError:
print('3rd with no data (should have no data in the database)')
continue
有没有更好的方法来达到这个目的?
【问题讨论】:
你需要在你使用attempts
变量的地方显示代码,然后我们才能更好地理解你可能遇到的代码问题,当然合并attempts
的方法更好替代您在此处提供的代码,如果不是最好的。
【参考方案1】:
有没有更好的方法来达到这个目的?
是的,有。使用while
循环和计数器。
count = 0
while count < 3:
try:
get_price_for_ticker()
break # reach on success
except RemoteDataError:
print('Retrying '.format(count + 1))
count += 1 # increment number of failed attempts
if count == 3:
... # if count equals 3, the read was not successful
此代码应进入您的外部 for
循环。或者,您可以使用接受ticker
参数的while
+ 错误处理代码定义一个函数,并且您可以在for
循环的每次迭代中调用that 函数。这是风格问题,由您决定。
【讨论】:
感谢您的回复。我应该把这个while循环放在上面的for循环中吗? @MKYJ 是的,你应该。或者,您可以将此循环放在一个接受ticker 参数的函数中,然后在for 循环中调用该函数。无论哪种方式都应该有效。 @MKYJ 另外,如果有帮助,请不要忘记投票并接受答案(按灰色复选标记并将其切换为绿色)。以上是关于Python - 更好的循环解决方案 - 出现错误后重新运行并在 3 次尝试后忽略该错误的主要内容,如果未能解决你的问题,请参考以下文章
python3错误之TypeError: 'dict_items' object is not callable
使用 Python3 gstreamer1.0 和 pylonsrc 使用 basler 相机和 pylon5 在处理循环中出现错误