البرمجة

تجنب خطأ F821 في flake8 مع gettext

لتجنب ظهور خطأ “F821 undefined name ‘_'” في flake8 عندما يكون _ قد تم تثبيته بواسطة gettext، يمكنك استخدام تقنية محددة. يعتمد الحل على استيراد النمط المناسب من استعراض gettext الخاص بك.

في الواقع، يمكنك تجنب هذا الخطأ عن طريق تعيين الدالة “_” كمتغير محلي في الوحدات التي تحتوي على استدعاءات لهذه الدالة. هذا الأمر يمكن أن يتم عبر استخدام دالة gettext.gettext بدلاً من _ مباشرة. على سبيل المثال، في الكود الخاص بك، يمكنك تغيير lib.py إلى ما يلي:

python
import gettext def fct(sentence): _ = gettext.gettext return _(sentence)

وفي main_script.py، يمكنك استخدام _ كالمعتاد:

python
#!/usr/bin/env python3 import gettext import lib gettext.translation('myapp', 'locale', ['de']).install() print(_('A sentence')) print(lib.fct('A sentence'))

بهذه الطريقة، سيتم تعيين _ كمتغير محلي في كل وحدة تحتاج إليها، وبالتالي لن يتم عرض خطأ flake8.

المزيد من المعلومات

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

باستخدام gettext.gettext بدلاً من _ مباشرة، نضمن أننا نستخدم الدالة المثبتة بواسطة gettext في الفضاء الأساسي بدلاً من الدالة _ القياسية. هذا يعني أننا نستطيع تجنب الخطأ المزعج الذي يظهر في flake8 دون الحاجة إلى استخدام تعليمات # noqa أو تجاهل الخطأ.

مقالات ذات صلة

زر الذهاب إلى الأعلى

المحتوى محمي من النسخ !!