Problem Set 12 FAQ
If you don’t see your question here, post it on Piazza or come to office hours! See the links in the navigation bar for both of those options.
General questions
-
I keep getting a
NoneTypeerror. Why does this happen?If your dates are suddenly becoming
Noneand you do not know why, check over your code to make sure that you are not assigning the result of theadvance_onemethod to a variable.x = d.advance_one() # incorrect self = self.advance_one() # incorrect
Remember,
advance_onedoes not return a value. We call it to modify an object, and we do not want it to return anything. As a result, you should not assign the result of a call toadvance_oneto a variable. If you do, that variable will end up with a value ofNone(a special value that is returned when a function does not explicitly return a value), and that can then lead to aNoneTypeerror.Instead, all of your calls to
advance_oneshould occur all by themselves on their own lines:d.advance_one() # correct self.advance_one() # correct
This same rule also applies to calls to
advance_n, since it should not return a value either. -
How do I read from a file?
In the videos, we presented two different ways to read the contents of a file.
In those examples, you will see that you can process a file line by line, or read the entire file as one big string.
Problem 2
See also question 1 from the general questions above.
-
The logic of my
days_betweenmethod looks right, but it’s giving the wrong answer. Do you have any suggestions?The
days_betweenmethod should use other methods from yourDateclass. If your logic indays_betweenseems correct but you are still getting the wrong answer, you should check your methods from earlier in the problem to see if they are correct. Even if you pass the test cases we have given you for those other methods, there may still be a bug. For instance, tryis_beforewith two differentDateobjects from the same year and month. Does the result seem right? What about for twoDates in different months? -
My
days_betweenmethod hangs (i.e., it keeps running indefinitely without giving me a return value) when I call it for certain dates. What could the problem be?The problem could be in your
advance_onemethod. Make sure that it actually advances the date in all possible cases. In particular, if you are using anif-elifstatement, you may want to add anelsecase to ensure that the date is advanced no matter what. Ifadvance_onefails to advance the date in certain cases, then yourdays_betweenmethod can end up in an infinite loop, which causes the method to hang.Another thing worth checking is whether your
days_betweenmethod may be incorrectly advancing its copy of the later of the two dates, rather than its copy of the earlier of the two dates. This can happen if youris_beforemethod is not returning the correct value when it compares the two dates in question. -
Is it good enough if my
Datemethods pass the test cases given in the assignment?Even if your
Datemethods pass the test cases given in the assignment, they may still be incorrect. We highly recommend thinking of your own test cases to ensure that yourDatemethods work properly. If you find a case in which a method gives invalid results, use temporaryprintstatements to figure out where the unexpected behavior occurs.