Errors are inevitable when working with the API, and they must be correctly handled by the use of try..except
blocks.
There are many errors that Telegram servers could return, but they all fall in one of these five categories (which are in turn children of the Error
superclass):
(400) BadRequest
(420) Flood
(500) InternalServerError
(303) SeeOther
(401) Unauthorized
As stated above, there are really many (too many) errors, and in case Pyrogram does not know anything about a specific error, it raises a special (520) UnknownError
exception and logs it in the unknown_errors.txt
file. Users are invited to report these unknown errors; in later versions of Pyrogram some kind of automatic error reporting module might be implemented.
Examples
from pyrogram.api.errors import (
BadRequest, Flood, InternalServerError,
SeeOther, Unauthorized, UnknownError
)
try:
# Something
pass
except BadRequest:
pass
except Flood:
pass
except InternalServerError:
pass
except SeeOther:
pass
except Unauthorized:
pass
except UnknownError:
pass
Exceptions may also contain some informative values which can be useful. e.g. FloodWait
holds the amount of seconds you have to wait before you can try again. The value is always stored in the x
field of the returned exception object:
from pyrogram.api.errors import FloodWait
try:
# something
pass
except FloodWait as e:
print(e.x)
TODO: Better explanation on how to deal with exceptions