eval() تنفيذ تعبير
آخر تحديث: 2026-09-22
eval() تنفيذ تعبير
تنفذ eval() تعبير Python الموجود في سلسلة نصية وتُرجع النتيجة. **تحذير أمني**: لا تستخدم eval مع مدخلات غير موثوقة.
| التصنيف | الدوال المدمجة |
|---|---|
| النوع | دالة مدمجة |
| إصدار بايثون | all |
📝 الصياغة
eval(expression[, globals[, locals]])
⚙️ المعاملات
| expression مطلوب | A Python expression string or code object. |
|---|---|
| globals اختياري | The global namespace dict.(القيمة الافتراضية:None) |
| locals اختياري | The local namespace dict.(القيمة الافتراضية:None) |
القيمة المُعادة:The result of evaluating the expression.
💥 الاستثناءات
SyntaxError— Raised when the expression has a syntax error.NameError— Raised when the expression references an undefined name.TypeError— Raised when globals or locals is not a dict.
▶ مثال
عدّل الكود واضغط تشغيل لرؤية النتيجة في لوحة المخرجات:
المخرجات:
15
1024
⚠️ تحذير يمكن لـ eval تنفيذ كود عشوائي، وفي بيئة الإنتاج استخدم ast.literal_eval بدلًا منه.
🏷️ دوال مدمجة ذات صلة
💡 حالات ذات صلة
المزيد من الحالات قادم قريباً — تابعونا.
❓ أسئلة شائعة
Qما الفرق بين eval() و exec()؟
Aينفّذ eval() تعبيرًا واحدًا ويُعيد نتيجته (مثل eval('1 + 2') يُرجع 3)؛ بينما ينفّذ exec() جملًا وكتلًا (if و for و def وغيرها) ويُعيد None.
Qماذا يحدث مع eval('x = 1')؟
Aيُثار SyntaxError. الإسناد جملة وليس تعبيرًا؛ eval() يقيّم التعبيرات فقط — لتنفيذ الجمل استخدم exec().
Qلماذا لا يجب استخدام eval لمعالجة مدخلات المستخدم؟
Aلأن eval() يستطيع تنفيذ كود اعتباطي، مثل السلسلة eval("__import__('os').system('dir')")؛ لتحليل مدخلات المستخدم استخدم ast.literal_eval الذي يتعامل مع القيم الحرفية فقط.
Qهل يمكنني استخدام متغيرات خارجية داخل eval؟
Aافتراضيًا نعم (يستخدم نطاقي العمومي/المحلي الحاليين)؛ ويمكن تمرير نطاقات مخصصة عبر وسيطتي globals/locals لتقييد الأسماء التي يمكن للتعبير الوصول إليها.