קובץ מצליח ליבא קובץ אחר אבל לא "קולט" את המחלקה שבתוכו

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

לייק 1

בשורה שאחרי import … תדפיסי את sys.modules.
האם הוא נמצא שם באחד ה־keys?

איך הייבוא נראה? import X או from Y import X?

לא, אני לא רואה את זה כשאני מדפיסה sys.modules.
היבוא נראה from y import x

נראה שה-sys.path שלך הוא לא התיקייה הראשית של הפרוייקט.
תצלמי בבקשה את היררכיית הקבצים מצד ימין של ה-IDE

2 לייקים

image
מקווה שצירפתי את מה שהתכוונת, זה היה בצד שמאל

כן זאת הייתה הכוונה - צד שמאל.

תנסי לפתוח את הפרוייקט עצמו בלבד - File > Open Folder ולאחר מכן תבחרי את תיקיית ה-chess.
תעדכני אם צצה בעיה

תודה על המענה. ניסיתי אבל אותה בעיה קיימת -
אני רצה עם ה-debugger, נראה כאילו הייבוא מתבצע (ברגע שיש פקודת ייבוא, זה קופץ לקובץ שביקשתי לייבא) אבל ברגע שצריך להשתמש במחלקה שנמצאת בתוך הקובץ -זה לא מזהה אותה.

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

מחלקת Camel אמורה לרשת את מחלקת Piece מתוך הקובץ שמיובא בראש הקובץ המצולם (from players import piece)

תנסי:
piece.Piece
זה לקחת מתוך הקובץ piece את המחלקה Piece

זורק לי SyntaxError
:sob:

אפשר לראות את השורה בבקשה? :slight_smile:

כאן קופצת השגיאה:

וזה מה שקורה בתוך newplayers.py:

וזה מה שקורה בתוך הקובץ piece:

תודה!

אה! כן, אי אפשר לרשום from X import Y.Z.
תצטרכי לרשום: from X.Y import Z במקום :slight_smile:

לייק 1

כלומר - אחרי from יבוא “שרשור” של הקבצים (X.Y), ואחרי ה-import יבוא התוכן מתוך הקובץ, קרי המחלקה (Z)?

נכון :slight_smile:

אם מעניין – ה־syntax של from… import מוגדר פורמלית ככה:

import_from: ('from' (('.' | '...')* dotted_name | ('.' | '...')+)
              'import' ('*' | '(' import_as_names ')' | import_as_names))

dotted_name: NAME ('.' NAME)*

import_as_name: NAME ['as' NAME]
import_as_names: import_as_name (',' import_as_name)* [',']

כוכבית אומר שהביטוי שלפניה יכול להופיע 0 עד אינסוף פעמים
פלוס אומר שהביטוי שלפניו יכול להופיע 1 עד אינסוף פעמים
סוגריים מרובעים אומרים שהביטוי שהם מכילים יכול להופיע 0 או 1 פעמים
| אומר “או”

לייק 1