Hatalar
Her başarısızlık hata fırlatır. İki sınıf ve her API hatasında bir istek id'si.
Hata yakalama
from openemail import OpenEmailApiError, OpenEmailNetworkError, openemail try: openemail.emails.send({'from': sender, 'to': recipient, 'subject': subject, 'text': text})except OpenEmailApiError as error: if error.is_validation: print(error.code, error.param, error.message) if error.is_permission: print(openemail.addresses.list()) if error.is_rate_limited: print('try again in', error.retry_after_seconds, 'seconds') print(error.status, error.request_id) raiseexcept OpenEmailNetworkError as error: if error.is_timeout: print('no answer in time') raiseBir gönderimdeki permission_error genellikle çalışma alanından değil ANAHTARIN gönderim kapsamından, yani kendisine verilmemiş bir alan adından veya adresten kaynaklanır; örneğin, addresses.list() çağrısının bu anahtarın hangi adreslerden gönderebileceğini söylediği çıktıyı bu yüzden yazdırır.
Sınıflar
| Sınıf | Ne zaman |
|---|---|
| OpenEmailApiError | API yanıt verdi, ama başarıyla değil. message, status, type, code, param, doc_url, request_id, retry_after_seconds, fields ve body taşır. |
| OpenEmailNetworkError | Hiç yanıt gelmedi: DNS, TLS, kopan bir bağlantı ya da zaman aşımı. Alttaki httpx istisnası olan cause değerini taşır ve neden zaman aşımıysa is_timeout True olur. |
| OpenEmailError | İkisinin de temel sınıfı; böylece tek bir except, API'nin ya da ağın neden olduğu her hatayı yakalar. verify_webhook_signature fonksiyonunun fırlattığı WebhookVerificationError da ondan türer. |
| ValueError | Hiçbir şey gönderilmeden önce fırlatılır: eksik ya da bozuk bir anahtar, kullanılamaz bir base_url, düz http üzerinden gidecek bir kimlik bilgisi, boş bir id. Yanlış bir http_client ya da JSON'un taşıyamayacağı bir gövde ise bunun yerine TypeError fırlatır. |
fields, bir kayıt formunun reddettiği her yanıtı key ve error olarak listeler ve diğer tüm hatalarda None olur. body, API'nin gönderdiği JSON'u saklar; gövde JSON değilse None olur.
| Özellik | Şu durumda true |
|---|---|
| is_auth | type değeri authentication_error, yani 401: anahtar yok, yanlış türde bir kimlik bilgisi veya bizim vermediğimiz bir anahtar. |
| is_permission | permission_error, 403: ihtiyaç duyduğu kapsama veya From adresine sahip olmayan gerçek bir anahtar. |
| is_scope_missing | code değeri insufficient_scope, yani eksik kapsamı adıyla belirten 403. |
| is_invalid_request | invalid_request_error, 400: anlaşılamayan bir istek. Boyut tavanını aşan bir mesaj 422 message_too_large olarak döner; dolayısıyla onu yakalayan özellik is_validation'dır. |
| is_validation | validation_error, 422: şema isteği reddetti ve param hangi alanın sorunlu olduğunu belirtir. |
| is_not_found | not_found_error, 404: böyle bir kaynak yok. |
| is_conflict | conflict_error, 409: kaynak, bu işlemin kendisine yapılabileceği noktayı geçmiş. |
| is_rate_limited | rate_limit_error, 429. Sunucu bir süre belirttiğinde bekleme süresi retry_after_seconds içindedir. |
| is_server_error | status 500 veya üzeri. Destekle iletişime geçerseniz request_id değerini belirtin. |
| is_retryable | status 408, 429, 500, 502, 503 veya 504. |
| is_step_up_required | code değeri step_up_required: kişi bir kod doğrulayana kadar bir OAuth erişim tokenının hassas bir değişiklikten önce aldığı 403. |
Özelliklerin çoğu, zarfın donmuş yarısı olan type alanını okur. code bir str olarak kalır, çünkü API onun açık ve eklemeli olduğunu garanti eder; bu yüzden tanımadığınız bir kodu type değeri gibi ele alın. Kapalı bir Literal, yeni bir hata türünü okumanın bedelini bir SDK yükseltmesi yapardı.
API'nin hata zarfı olmayan bir gövde de bir OpenEmailApiError'a dönüşür; type durum kodundan çıkarılır ve code değeri unrecognised_response olur. Gövdesi JSON olmayan bir başarı yanıtı da aynı hatayı fırlatır.
Bir AsyncOpenEmail çağrısını iptal etmek hiçbir OpenEmailError fırlatmaz. İptalin kendisi yayılır; ister istek sırasında ister bir yeniden denemeden önceki bekleme sırasında gerçekleşsin. Ondan sonra hiçbir şey yeniden denenmez.
request_id
Her OpenEmailApiError, sunucunun gönderdiği istek id'sini hata gövdesinden veya x-request-id başlığından alarak taşır ve bu, hatanızı sunucu günlüğündeki bir satıra bağlayan tek şeydir. Başarılı bir yanıt yalnızca ayrıştırılmış gövdeyi döndürür, dolayısıyla orada okunacak bir istek id'si yoktur.
str(error) durum kodu, hata kodu ve istek id'siyle biter; böylece istisnayı yazdıran bir günlük satırı üçünü de korur. Bir OpenEmailApiError ayrıca pickle edildiğinde tüm alanlarıyla birlikte korunur; böylece bir worker sürecinde fırlatılan bir hata üst sürece eksiksiz ulaşır.