سؤال

لقد قمت بإعداد وحدة التسجيل للحصول على البرنامج النصي الجديد Python الجديد. لدي معالجان، واحد إرسال الأشياء إلى ملف، وواحد لتنبيهات البريد الإلكتروني. Smtphandler هو الإعداد على إرسال أي شيء في مستوى الخطأ أو أعلى.

كل شيء يعمل بشكل رائع، ما لم يفشل اتصال SMTP. إذا كان خادم SMTP لا يستجيب أو فشل المصادقة (يتطلب مصادقة SMTP)، فسوف يموت البرنامج النصي بالكامل.

أنا جديد إلى حد ما بالنسبة إلى Python، لذلك أحاول معرفة كيفية التقاط الاستثناء الذي يثيره Smtphandler بحيث لن يؤدي أي مشاكل ترسل رسالة السجل عبر البريد الإلكتروني إلى أسفل البرنامج النصي بالكامل. نظرا لأنني أكتب أخطاء أيضا إلى ملف السجل، في حالة فشل تنبيه SMTP، أريد فقط أن أستمر في الذهاب، وليس إيقاف أي شيء.

إذا كنت بحاجة إلى عبارة "TRY:"، فهل ستذهب حول تسجيل الدخول. الإعداد.

هل كانت مفيدة؟

المحلول

يجب عدم إيقاف الاستثناءات التي تحدث أثناء التسجيل البرنامج النصي الخاص بك، على الرغم من أنها قد تتسبب في طباعة Traceback sys.stderr. وبعد من أجل منع هذه النسخة المطبوعة، قم بما يلي:

logging.raiseExceptions = 0

هذا ليس الافتراضي (لأنه في التطوير الذي تريده عادة معرفة الفشل) ولكن في الإنتاج، raiseExceptions لا ينبغي تعيين.

يجب أن تجد أن SMTPHandler سيحاول إعادة الاتصال في المرة التالية التي يتم تسجيل خطأ (أو أعلى).

logging يفعل يمر من خلال SystemExit و KeyboardInterrupt استثناءات، ولكن يجب معالجة جميع الآخرين حتى لا يسببون إنهاء تطبيق يستخدم التسجيل. إذا وجدت أن هذا ليس هو الحال، فيرجى نشر تفاصيل محددة من الاستثناءات التي تمن خلالها وتسبب في إنهاء البرنامج النصي الخاص بك، وعن إصدار نظام تشغيل Python / التشغيل. ضع في اعتبارك أن البرنامج النصي قد يبدو أن تعلق إذا كان هناك مهلة شبكة تسبب حظر المعالج (على سبيل المثال إذا استغرق البحث عن DNS وقتا طويلا، أو إذا استغرق اتصال SMTP وقتا طويلا).

نصائح أخرى

ربما تحتاج إلى القيام كليهما. لمعرفة ذلك، أقترح تثبيت خادم بريد محلي واستخدام ذلك. بهذه الطريقة، يمكنك إيقاف تشغيله أثناء تشغيل البرنامج النصي وللاحظ رسالة الخطأ.

لإبقاء الكود الصيني، يجب أن تمتد Smtphandler بطريقة يمكنك التعامل مع الاستثناءات في مكان واحد (بدلا من التغليف كل مكالمة مسجل مع TRY-PACK).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top