mirror of
https://github.com/LonamiWebs/Telethon.git
synced 2024-11-22 01:16:35 +03:00
Improve doc page on RPC errors (#1350)
This commit is contained in:
parent
bea4225d28
commit
5d7e9f3879
|
@ -7,8 +7,59 @@ RPC Errors
|
|||
RPC stands for Remote Procedure Call, and when the library raises
|
||||
a ``RPCError``, it's because you have invoked some of the API
|
||||
methods incorrectly (wrong parameters, wrong permissions, or even
|
||||
something went wrong on Telegram's server). All the errors are
|
||||
available in :ref:`telethon-errors`, but some examples are:
|
||||
something went wrong on Telegram's server).
|
||||
|
||||
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.
|
||||
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)
|
||||
|
||||
- ``SessionPasswordNeededError``, if you have setup two-steps
|
||||
verification on Telegram.
|
||||
- ``CdnFileTamperedError``, if the media you were trying to download
|
||||
from a CDN has been altered.
|
||||
verification on Telegram and are trying to sign in.
|
||||
- ``FilePartMissingError``, if you have tried to upload an empty file.
|
||||
- ``ChatAdminRequiredError``, you don't have permissions to perform
|
||||
said operation on a chat or channel. Try avoiding filters, i.e. when
|
||||
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
|
||||
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
|
||||
===============
|
||||
|
||||
|
@ -76,3 +148,8 @@ You can also except it and act as you prefer:
|
|||
quit(1)
|
||||
|
||||
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
|
||||
|
|
|
@ -6,7 +6,8 @@ API Errors
|
|||
|
||||
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
|
||||
:members:
|
||||
|
|
Loading…
Reference in New Issue
Block a user