Improve doc page on RPC errors (#1350)

This commit is contained in:
Lonami Exo 2019-12-27 11:27:00 +01:00
parent bea4225d28
commit 5d7e9f3879
2 changed files with 84 additions and 6 deletions

View File

@ -7,8 +7,59 @@ RPC Errors
RPC stands for Remote Procedure Call, and when the library raises RPC stands for Remote Procedure Call, and when the library raises
a ``RPCError``, it's because you have invoked some of the API a ``RPCError``, it's because you have invoked some of the API
methods incorrectly (wrong parameters, wrong permissions, or even methods incorrectly (wrong parameters, wrong permissions, or even
something went wrong on Telegram's server). All the errors are something went wrong on Telegram's server).
available in :ref:`telethon-errors`, but some examples are:
You should import the errors from ``telethon.errors`` like so:
.. code-block:: python
from telethon import errors
try:
async with client.takeout() as takeout:
...
except errors.TakeoutInitDelayError as e:
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ here we except TAKEOUT_INIT_DELAY
print('Must wait', e.seconds, 'before takeout')
There isn't any official list of all possible RPC errors, so the
`list of known errors`_ is provided on a best-effort basis. When new methods
are available, the list may be lacking since we simply don't know what errors
can raise from them.
Once we do find out about a new error and what causes it, the list is
updated, so if you see an error without a specific class, do report it
(and what method caused it)!.
This list is used to generate documentation for the `raw API page`_.
For example, if we want to know what errors can occur from
`messages.sendMessage`_ we can simply navigate to its raw API page
and find it has 24 known RPC errors at the time of writing.
Base Errors
===========
All the "base" errors are listed in :ref:`telethon-errors`.
Any other more specific error will be a subclass of these.
If the library isn't aware of a specific error just yet, it will instead
raise one of these superclasses. This means you may find stuff like this:
.. code-block:: text
telethon.errors.rpcbaseerrors.BadRequestError: RPCError 400: MESSAGE_POLL_CLOSED (caused by SendVoteRequest)
If you do, make sure to open an issue or send a pull request to update the
`list of known errors`_.
Common Errors
=============
These are some of the errors you may normally need to deal with:
- ``FloodWaitError`` (420), the same request was repeated many times. - ``FloodWaitError`` (420), the same request was repeated many times.
Must wait ``.seconds`` (you can access this attribute). For example: Must wait ``.seconds`` (you can access this attribute). For example:
@ -26,9 +77,8 @@ available in :ref:`telethon-errors`, but some examples are:
time.sleep(e.seconds) time.sleep(e.seconds)
- ``SessionPasswordNeededError``, if you have setup two-steps - ``SessionPasswordNeededError``, if you have setup two-steps
verification on Telegram. verification on Telegram and are trying to sign in.
- ``CdnFileTamperedError``, if the media you were trying to download - ``FilePartMissingError``, if you have tried to upload an empty file.
from a CDN has been altered.
- ``ChatAdminRequiredError``, you don't have permissions to perform - ``ChatAdminRequiredError``, you don't have permissions to perform
said operation on a chat or channel. Try avoiding filters, i.e. when said operation on a chat or channel. Try avoiding filters, i.e. when
searching messages. searching messages.
@ -47,6 +97,28 @@ You can refer to all errors from Python through the ``telethon.errors``
module. If you don't know what attributes they have, try printing their module. If you don't know what attributes they have, try printing their
dir (like ``print(dir(e))``). dir (like ``print(dir(e))``).
Attributes
==========
Some of the errors carry additional data in them. When they look like
``EMAIL_UNCONFIRMED_X``, the ``_X`` value will be accessible from the
error instance. The current list of errors that do this is the following:
- ``EmailUnconfirmedError`` has ``.code_length``.
- ``FileMigrateError`` has ``.new_dc``.
- ``FilePartMissingError`` has ``.which``.
- ``FloodTestPhoneWaitError`` has ``.seconds``.
- ``FloodWaitError`` has ``.seconds``.
- ``InterdcCallErrorError`` has ``.dc``.
- ``InterdcCallRichErrorError`` has ``.dc``.
- ``NetworkMigrateError`` has ``.new_dc``.
- ``PhoneMigrateError`` has ``.new_dc``.
- ``SlowModeWaitError`` has ``.seconds``.
- ``TakeoutInitDelayError`` has ``.seconds``.
- ``UserMigrateError`` has ``.new_dc``.
Avoiding Limits Avoiding Limits
=============== ===============
@ -76,3 +148,8 @@ You can also except it and act as you prefer:
quit(1) quit(1)
VoIP numbers are very limited, and some countries are more limited too. VoIP numbers are very limited, and some countries are more limited too.
.. _list of known errors: https://github.com/LonamiWebs/Telethon/blob/master/telethon_generator/data/errors.csv
.. _raw API page: https://tl.telethon.dev/
.. _messages.sendMessage: https://tl.telethon.dev/methods/messages/send_message.html

View File

@ -6,7 +6,8 @@ API Errors
These are the base errors that Telegram's API may raise. These are the base errors that Telegram's API may raise.
See :ref:`rpc-errors` for a more friendly explanation. See :ref:`rpc-errors` for a more in-depth explanation on how to handle all
known possible errors and learning to determine what a method may raise.
.. automodule:: telethon.errors.common .. automodule:: telethon.errors.common
:members: :members: