【问题标题】:How to reexecute if an error occurs in python?python出现错误如何执行?
【发布时间】:2021-12-16 16:24:51
【问题描述】:

我正在使用 Twint(一个 Twitter 抓取工具),但不知何故有一个我无法解决的问题。我想知道是否有一种方法可以在发生错误时等待1分钟并重新执行? 我的代码是这样的:

import twint

geos = ["40.74566208501717, -73.99137569478954", "35.68802408270403, 139.76489869554837", "31.22521968438549, 121.51655148017774"]
    
for geo in geos:
    print(str(geo)+','+'10km')
    c = twint.Config()
    c.Limit = 20
    c.Geo = str(geo)+','+'10km'
    twint.run.Search(c)

有时候,twint.run.Search(c) 不能正常工作。那么,一旦出现错误,有没有办法只重新执行这个循环而不重新执行整个循环?

有人会帮助我吗?任何想法都会非常有帮助。非常感谢!

【问题讨论】:

  • 在它不能正常工作的情况下会发生什么。它会崩溃吗?

标签: python twint


【解决方案1】:

如果你想简单地假装错误没有发生,你可以这样做:

try:
    twint.run.Search(c)
except WhateverExceptionType:
    pass

(将WhateverExceptionType 替换为您看到的实际错误类型)

如果出现错误时您想让整个程序在继续循环之前等待一分钟,请将其放入 except

import time

...

    try:
        twint.run.Search(c)
    except WhateverExceptionType:
        time.sleep(60)

如果您希望它在等待后重新执行该特定搜索(而不是继续下一个循环迭代),请将 that 放在 except 中。请注意,如果 except 中的代码引发,那么它将引发 except 并停止您的程序。

    try:
        twint.run.Search(c)
    except WhateverExceptionType:
        time.sleep(60)
        twint.run.Search(c)

【讨论】:

  • 非常感谢!对于类似`twint.token.RefreshTokenException: Could not find the Guest token in HTML`之类的错误,我怎么知道它是什么类型的错误?
  • twint.token.RefreshTokenException -- 或者如果你这样做 from twint.token import RefreshTokenException 那么它只是RefreshTokenException
  • 有效!谢谢!
  • 有没有办法显示我在终端上遇到的错误类型?
  • except 中设置except RefreshTokenException as e 然后print(e)
【解决方案2】:

你可以这样做,在 60 秒后再次尝试搜索,最多重试 10 次:

import time

for geo in geos:
    print(str(geo)+','+'10km')
    c = twint.Config()
    c.Limit = 20
    c.Geo = str(geo)+','+'10km'

    success=False
    retries = 0
    while not success and retries <= 10:
        try:
            twint.run.Search(c)
            success=True
        except twint.token.RefreshTokenException:
            time.sleep(60)
            retries += 1
        except: # <- catches all other exceptions
            retries = 11  # <- e.g. stop trying if another exception was raised

【讨论】:

  • 看来已经解决了!非常感谢!
  • 有没有办法看看我在您的解决方案中遇到了什么错误?
  • 当然,我只是举了一个例子,说明如何根据引发的异常采取不同的操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-30
  • 2019-03-31
  • 2020-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多