שאלה כללית על גנרייטורים אבל שעלתה לי ספציפית בלחששנית

אם אנחנו רוצים להריץ גינרטור שייתן לנו את כל האופציות האפשריות, כלומר נעשה (כמו במחברת)
while True
print(next(generator))

עכשיו מתישהו יגיע השלב שבו תחזור לנו השגיאה של StopIteration בהנחה שזה לא משהו אין סופי.

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

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

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

(לאותו פתרון אפשר גם להגיע אם מסתכלים על הקובץ, והדבר הראשון שעלה לי בגוגל כשחיפשתי איך לפתוח את הקובץ לקריאה)

*האם אפשר שקוראים ל next לשלוח משתנה לפונקציה של הגיינרטור? ניסיתי את זה באחד התרגילים (לא בקריאה לnext, אלא בקריאה לגנרטור) וזה עבד נהדר - בדיוק כמו בכל פונקציה נראה לי

לייק 1

היי,
ממש בקרוב נלמד על טיפול בשגיאות ואז נדע איך להתמודד עם StopIteration

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

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

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

רמז: כשמפעילים לולאות על גנרטורים - לא נזרקות שגיאות

לייק 1

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

לא צריך גוגל יש דוגמאות פשוטות יותר במחברות שמדגימות אופציה של לולאות אינסופיות ושל גנרייטורים שכן מסתיימיםש

זה קרה לי בתרגיל אחר - נראה לי שהשגיאה הזו טוענת שאת מתעקשת להריץ את הגנרטור אחרי שהוא נגמר

הייתי בודקת שני דברים -

  1. מתי / למה הגנרטור “נגמר”
  2. למה הוא חושב שאת מתעקשת שהוא ימשיך לרוץ?
    בהקשר 2. הופיעו 2 שיטות עיקריות לקריאה לגנרטור במחברות (רק אחת מהן יכולה להוביל לשגיאה הזו לדעתי)

זה היה רעיון ממש טוב ללכת לקרוא שוב את המחברת. חשבתי שהבנתי את זה אבל אז! הייתה לי בעיה מוזרה אבל זה הסתדר. תודה לכולם סיימתי את התרגיל :slight_smile:

3 לייקים