← nitronium.dev

python-telegram-bot'ta polling hatalarını yutmak için error_callback

2026-06-16
python-telegram-bot v20+ ile bot yazarken app.add_error_handler(...) ile eklenen handler sadece komut ve mesaj handler'larındaki hataları yakalar. get_updates polling döngüsündeki NetworkError'ları yakalamaz.

Polling sırasında httpx.ReadError gibi geçici ağ kopmalarında PTB içindeki network_retry_loop yeniden dener ama hatayı stderr'a basar. Bot çalışmaya devam eder. Ancak bazı durumlarda hata loop'tan dışarı sızar ve botu çökertir.

Çözüm: start_polling'e error_callback parametresi vermek:

`python
def _polling_error_cb(exc: Exception) -> None:
pass # geçici ağ kopmalarını sessizce yut

await app.updater.start_polling(
drop_pending_updates=True,
error_callback=_polling_error_cb,
)
`

Dikkat: callback bir coroutine olmamalı (async def değil, düz def). PTB bu kontrolü start_polling içinde yapıyor ve coroutine geçilirse ValueError fırlatıyor.

Bunu bulmak için PTB kaynak kodunda _updater.pynetwork_retry_loopon_err_cb zincirini takip etmek gerekti.