[Tutor] commandline unable to read numbers?

Peter Otten __peter__ at web.de
Sun Aug 7 13:28:26 CEST 2011


Robert Sjoblom wrote:

> I have a quite odd problem, and I've come across it before but
> probably ignored it at the time because I had other concerns. I've
> tried googling for the answer but haven't really come closer to
> solving it.
> This is what happens:
> C:\[path]\nester>C:\Python32\python.ex
> e setup.py register
> running register
> running check
> We need to know who you are, so please choose either:
>  1. use your existing login,
>  2. register as a new user,
>  3. have the server generate a new password for you (and email it to you),
>  or 4. quit
> Your selection [default 1]:
> 1
> Please choose one of the four options!
> We need to know who you are, so please choose either:
>  1. use your existing login,
>  2. register as a new user,
>  3. have the server generate a new password for you (and email it to you),
>  or 4. quit
> Your selection [default 1]:
> 
> No matter what I enter it will loop back. It seems my commandline
> can't read numbers? The other time I noticed it was while working on a
> notebook example:
> 
> class Menu:
>     """Display a menu and respond to choices when run."""
>     def __init__(self):
>         self.notebook = Notebook()
>         self.choices = {
>             "1": self.show_notes,
>             "2": self.search_notes,
>             "3": self.add_note,
>             "4": self.modify_note,
>             "5": self.quit
>             }
> 
>     def display_menu(self):
>         print("""
>     Notebook Menu
> 
>     1. Show All Notes
>     2. Search Notes
>     3. Add Note
>     4. Modify Note
>     5. Quit
>     """)
> 
>     def run(self):
>         """Display the menu and respond to choices."""
>         while True:
>             self.display_menu()
>             choice = input("Enter an option: ")
>             action = self.choices.get(choice)
>             if action:
>                 action()
>             else:
>                 print("{0} is not a valid choice.".format(choice))
> 
> This code works in IDLE, so I know it's nothing in the actual code
> that's a problem, but when I run it in commandline it will just repeat
> "is not a valid choice." Note that it does this no matter what I
> actually enter, it won't actually get any kind of input except the
> enter key. So I suppose it's a problem with input() (I'm using python
> 3.2 btw). Anyone have any insights?

I think you are on the right track: Python 3.2's input() has a nasty bug on 
Windows (http://bugs.python.org/issue11272). If you repeat the following in 
your interactive interpreter (invoked from the commmandline)

>>> input()
123
'123'

and see '123\r' instead of just '123' you are affected. I believe the bug is 
fixed in 3.2.1, so the easiest solution to your problem would be to switch 
to that version.




More information about the Tutor mailing list