لتجنب ظهور خطأ “F821 undefined name ‘_'” في flake8 عندما يكون _ قد تم تثبيته بواسطة gettext، يمكنك استخدام تقنية محددة. يعتمد الحل على استيراد النمط المناسب من استعراض gettext الخاص بك.
في الواقع، يمكنك تجنب هذا الخطأ عن طريق تعيين الدالة “_” كمتغير محلي في الوحدات التي تحتوي على استدعاءات لهذه الدالة. هذا الأمر يمكن أن يتم عبر استخدام دالة gettext.gettext
بدلاً من _
مباشرة. على سبيل المثال، في الكود الخاص بك، يمكنك تغيير lib.py
إلى ما يلي:
-
كيفية نقل مستودع Git مع Git LFS10/03/2024
pythonimport 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
أو تجاهل الخطأ.