טיפ פייתון - הרצת תוכנית והחזרת התוצאה

12/08/2025

הפקודה eval בפייתון מריצה פקודה בודדת ומחזירה את התוצאה:

result = eval('2 + 5')

אבל בניגוד ל JavaScript, ה eval של פייתון מקבל רק פקודה אחת. זה לא עובד:

result = eval("""
import os
os.name
""")

במקום eval, הפקודה exec יודעת לקבל קוד ולהריץ אותו. הבעיה עם exec היא שהיא לא מחזירה ערך ולכן בשביל להשתמש בה אני ארצה בתוך הקוד שאני מריץ לשים ערך לתוך גלובאלי. אני מעביר ל exec מילון בתור פרמטר שני וכל המשתנים הגלובאליים יישמרו לאותו מילון. זה נראה ככה:

ns = {}
exec("""
import os
result = os.name
""", ns)

print(ns['result'])

לסיום הרבה פעמים נרצה לעטוף את ה exec ב try/except כדי לטפל בשגיאות תחביר לדוגמה:

try:
    ns = {}
    exec("""
    import os
    result = os.name
    """, ns)

    print(ns['result'])
except SyntaxError as e:
    print(f"Syntax error: {e}")

פקודת exec יכולה לעזור כשאני רוצה לטעון קונפיגורציה מקובץ שנראה כמו פייתון לדוגמה קובץ כזה:

# settings.conf

font_face = ""
font_size = 10
line_numbers = True
tab_size = 4
auto_indent = True

הפעלת הקובץ ב exec והעברת מילון ריק בפרמטר השני תמלא את המילון במפתחות מהקובץ. נשים לב שגם exec וגם eval מגיעים עם סיכוני אבטחה משמעותיים ויש להיזהר ולהפעיל אותם רק בתוך סביבת sandbox. אפילו אם אנחנו רק רוצים להריץ קוד ש AI יצר מתוך פרומפט שאני שלחתי.

למידע נוסף ועוד דוגמאות על exec שווה לקרוא כאן: https://realpython.com/python-exec/