Mypy --ignore-missing-imports שח/מט

תגיות:

אחרי ריבים ארוכים עם אימפורטים ועם mypy הערות היחידות שנשארו לי הן מסוג Cannot find implementation or library stub for module named x.
הרצה של mypy עם הדגל --ignore-missing-imports נותנת את האור הירוק המיוחל.
כל חיפוש בגוגל מוביל ל-https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports שלא מספק שום פיתרון מלבד העמסת הקוד בהערות מסוג # type: ignore שעושה את אותה פעולה כמו הוספת הדגל בהרצה.
השאלה היא כמובן האם זה עובר מבחינת הגשת תרגילים, או שמא יש צורך בהוספת ההערות כחלק מהקוד?

הייתי שמח גם לדעת מה רמת ההשקעה הסבירה (IRL, לא כחלק מתרגול) לטיפול בשגיאות של mypy. כחלק מהטיפול בשגיאות נאלצתי להוסיף לקוד שורות מיותרות (דוגמאת return None בסוף פונקציה) ולמצוא הרבה workarounds שהייתי מעדיף שלא להכניס בקוד, רק על מנת ש-mypy תאשר את ה-type hints שנתתי.

2 לייקים

בנוגע לענייני ה־import – כן יצא לי להשתמש לא מעט ב־--ignore-missing-imports. מה שאני עושה בד"כ זה import אבסולוטי שמתחיל בתיקייה הגבוהה ביותר שבה יש __init__.

להכניס return None זה לא בהכרח רע, וזה אכן נחוץ במקרה של mypy --strict.
אם יש דברים שמשנמכים את האיכות של הקוד, יש 2 אופציות:

  1. אתה צריך להתנסות קצת יותר עם Type Annotations כדי לקבל תחושה לגבי קצת יותר פיצ’רים
  2. (פחות סביר) יש באגים/דברים בעייתיים ב־mypy שיש עליהם באג פתוח/אתה צריך לפתוח עליהם באג.

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

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

(+לייק על התמונה מ־Warhammer 40k)

לייק 1

קודם כל אני מבין שמבחינת הגשה הפתרון עובר :upside_down_face:
ועכשיו לעניינו:
מסיבה שממש לא ברורה לי ונאבקתי איתה שעות ללא פתרון, אימפורט אבסולוטי לא עובד לי ומקריס את התוכנה (ModuleNotFoundError).
כל הקבצים נמצאים תחת תיקייה אחת ובה קובץ __init__ (ניסיתי גם למחוק אותו וללכת על גישת הnamespace של +python 3.3 אך ללא הועיל).

לגבי עניין ה-annotations לי קרה המקרה הבא:
על מנת להקל את קריאות הפלט הוספתי ללוח מספרי שורות ואותיות בתחתית כל עמודה. לצורך כך הוספתי פונקציה שתפקידה להמיר position tuples שמתקבלים עם שילוב של מספר ואות לטאפל של מספרים בלבד. מכאן שערך ההחזרה של הפונקציה אמור להיות Tuple[int, int].
מכיוון ו-mypy לא מריצה את הקוד, היא לא עלתה על כך שביצעתי המרה של סוגי ערכים וטענה שאני מחזיר Tuple[Union[int, str], Union[int, str]] (סוג הערך שהתקבל על ידי הפונקציה).
שיניתי את הפונקציה על מנת שהטאפל שיוחזר לעולם לא יכיל סטרינגים ולא יבלבל את mypy, וכעת mypy לא מוכנה לקבל את העובדה שלטאפל יש ערך קבוע וטוענת שיש צורך ב- Tuple[int, ...]. בשלב הזה כבר נשברתי (כמובן שאחרי עוד כמה נסיונות לחנך את mypy).

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

לגמרי לא שמתי לב שזו תמונה של warhammer. זו בסך הכל דרכי להגיד תודה.
אז שוב:
image