[Tutor] puzzling EOFError when mocking raw_input in doctest

broek at cc.umanitoba.ca broek at cc.umanitoba.ca
Sun Aug 10 22:03:20 CEST 2008


Hi all,

I've continued playing about with mocking raw_input in doctests in  
light of Kent's reply.

I've hit an odd thing---if my substitute for raw_input returns '', I  
get an EOFError. The code below shows the problem. It arises equally  
if myrawalt is used in the doctest in place of myraw, so I am sure the  
problem has nothing to do with the use of iter. I can work around the  
problem in my actual target code---that code, like the toy code below,  
calls strip() on the results of raw_input, so I can get away with  
having my raw_input substitute return ' ' in place of ''. But, I  
cannot figure out why the EOFError comes up. Any thoughts?

Thanks and best,

Brian vdB


class myraw(object):
     def __init__(self, values):
         self.stream = iter(values)
     def readline(self):
         return str(self.stream.next())

class myrawalt(object):
     def __init__(self, values):
         self.values = values
         self.count = 0
     def readline(self):
         data = str(self.values[self.count])
         self.count += 1
         return data

def double_input():
     """>>> import sys
     >>> sys.stdin = myraw([21,3.1415])
     >>> double_input(); double_input() # doctest: +ELLIPSIS
     42
     6.28300...
     >>> sys.stdin = myraw([' ',])
     >>> double_input()
     0
     >>> sys.stdin = myraw(['',])
     >>> double_input()    # Failing test
     0
     """
     val = raw_input().strip() or 0
     val = float(val) * 2
     val = [val, int(val)][val == int(val)]
     return val

def __test():
     import doctest
     doctest.testmod()

if __name__ == "__main__":
     __test()



More information about the Tutor mailing list