[Tutor] using generators to mock raw_input for doctest
broek at cc.umanitoba.ca
broek at cc.umanitoba.ca
Sun Aug 10 21:16:26 CEST 2008
----- Message from kent37 at tds.net ---------
Date: Sun, 10 Aug 2008 14:03:38 -0400
From: Kent Johnson <kent37 at tds.net>
Reply-To: Kent Johnson <kent37 at tds.net>
Subject: Re: [Tutor] using generators to mock raw_input for doctest
> On Sun, Aug 10, 2008 at 1:38 AM, <broek at cc.umanitoba.ca> wrote:
>
>> 2) Is there some better way to enable doctesting of code that uses
>> raw_input? All I found when googling was the suggestion that in place of:
>>
>> def myfunc():
>> # code employing raw_input here
>>
>> one could write:
>>
>> def myfunc(input_meth=raw_input):
>> # code with raw_input calls replaced with input_meth calls
>>
>> but that seems like complicating my code for the non-doctest case.
>
> It is not going to make your code more complicated - the client code
> doesn't change at all and in myfunc you just change your use of
> raw_input() to input_meth(). If you declare
> def myfunc(raw_input=raw_input):
> you don't even have to change the body of myfunc.
Thanks for the reply, Kent.
I didn't express myself well. What I meant was I didn't quite like the
complication of the signature for no gain from the non-testing
client's side. I'm thinking not that it would make the code harder to
use, but rather a bit harder to figure out how to use---but I may well
over-rate the cognitive overhead involved :-)
<snip my smelly attempt to use a generator>
> This is needlessly complex.
I suspected as much :-)
> The values argument must be iterable (or
> the for loop would break) so you might as well use its iterator
> instead of making your own:
>
> class myraw(object):
> def __init__(self, values):
> self.stream = iter(values)
> def readline(self):
> return str(self.stream.next())
<Smacks forehead>
Thanks again,
Brian vdB
More information about the Tutor
mailing list