תופעה מוזרה (?)

היי

אז כתבתי את הקוד לאיחוד CSV ועבדתי עליו הרבה ועשיתי הרבה שינויים.

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

חשוב לי להגיד שבוודאות הכל רץ כל פעם ובוודאות שינה את הקובץ (כלומר זה לא שזה עבד פעם ופשוט פתחתי קובץ ישן שהכל בו מאוחד וחשבתי שזה עבד) כי עבדתי כל הזמן עם אותו קובץ חדש והוא השתנה כל הזמן עם שינוי הקוד שלי.

האם זה מקריות? כלומר למרות שאני חשבתי שהמשתנה הזה סופר קריטי הוא כנראה לא היה? בכל מקרה אבל הקוד לא היה אמור לרוץ כי באמצע הקוד יש משתנה שלא קיים. חשבתי אולי הוא זוכר את המשתנה הזה מפעם או משהו אחר? אני לא בטוחה מה לחשוב. זה ממש מוזר

תודה!

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

בהחלט קורה לי לפעמים גם הוא פשוט זוכר את המשתנה.

מה שאיתמר אמר

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

ברגע שתא עם קוד מסוים הורץ פייתון שומר את הפונקציות והמשתנים. גם אם נמחק את התא, כל עוד לא עשינו restart kernel או דרסנו את השם שלהם , כל המשתנים והפונקציות שהוגדרו נשמרים על ידי פייתון.

לייק 1

תודה זה מה שחשבתי.

קצת מדאיג בסוף מקשה לעלות על בעיות. אני אבדוק מעכשיו טוב יותר כל קוד שלי.

אתם יכולים להריץ את הפונקציה dir() באיזשהו תא כדי לראות איזה דברים פייתון מכיר כרגע. לא להיבהל מדברים שאתם לא מכירים.