使用 telethon.sync 时如何处理 "flood wait" 错误?

How to handle "flood wait" errors when using telethon.sync?

看起来客户端的同步版本没有抛出任何错误? 使用 telethon.sync 时处理错误的正确方法是什么?

下面的代码导致客户端转到 "sleep",但没有出现任何错误。

我尝试对 FloodWaitError 进行显式例外处理,但没有解决问题。

from telethon.sync import TelegramClient
from telethon.tl.functions.channels import GetFullChannelRequest


if __name__ == '__main__':
    setup_logging(level=logging.INFO)

tg = TelegramClient(
    'anon',
    api_id=config.API_ID,
    api_hash=config.API_HASH,
)

with tg as client:
    try:
        result = client(GetFullChannelRequest(-1001100118939))
    except ValueError as e:
        print(e)
        break;
        # print('Flood wait for ', e.seconds)
        # time.sleep(e.seconds)
    print(result)

telethon.sync 不会改变异常的行为。但是,FloodWaitError 不是 ValueError,因此您的 except 不会捕捉到它。以下将起作用:

from telethon import errors

try:
    ...
except errors.FloodWaitError as e:
    print('Flood wait for ', e.seconds)

注意,如果泛洪错误小于一分钟,库默认会自动休眠,在这种情况下,为了方便,它会等待而不引发。