[python] raw_input() jeste jednou (bylo raw_input() bug ... vyvoj Pythonu, jimavy pribeh)

geon geon na post.cz
Středa Srpen 3 12:42:36 CEST 2005


Petr Prikryl napsal(a):

>[...]
>  
>
>>Je to tam, ale je mezi uzavřenými [...] Částečné řešení
>>lze nalézt u poslední poznámky by birkenfeld, tj. explicitně
>>
>>    raw_input(s.encode(sys.stdout.encoding))
>>
>>Dá se to vyřešit centralizovaně například definicí vlastní funkce:
>>
>>def my_input(s):
>>    import sys
>>    return raw_input(s.encode(sys.stdout.encoding))
>>
>>Ale moc se mi to nelíbí, protože takhle by měla fungovat
>>raw_input() už "od narození". [...]
>>    
>>
>
>Až teď jsem si všiml názoru GvR, který se týká
>raw_input() -- viz http://www.python.org/peps/pep-3000.html
>a http://www.python.org/doc/essays/ppt/regrets/PythonRegrets.pdf
>
>Stučně řečeno, GvR lituje, že raw_input() vůbec vzniklo.
>Doporučuje používat sys.stdin.readline(). Něco na tom je.
>Nedobře fungující implementaci raw_input() můžu jednoduše
>nahradit vlastní malou funkcí:
>
>========================================
>import sys
>
>def my_input(prompt):
>    sys.stdout.write(prompt)
>    return sys.stdin.readline()
>
>r = my_input('prompt: ')
>print r
>========================================
>
>pepr
>  
>

Mám k tomu snad 2 poznámky:

* rozhodně to není pro začátečníky. Je to takové nejednoduché, nepřímé. 
Sice by se to dalo udělat, jako třebas v kurzu livewires, kde si takto 
podobně nadefinují funkce i na čtení čísel i s ošetřením hodnot, ale to 
zas funguje jen pokud člověk jede v livewires nebo v tom jednom kurzu, 
kde to je implementováno
* proč se takto neimplementuje raw_input? (možná že to tam guido píše, 
četl jsem to zhruba)

Myslím že není dobré začátečníky hned upozorňovat na bug, který je téměř 
v prvním příkazu, se kterým se setkají. Spíš je se snažit přimět  
nepoužívat diakritiku a teprv když na to sami přijdou, že jim to 
nefunguje, tak jim napovědět buď co píšeš nebo staré dobré:

# -*- coding: ...... -*-
vyzva=u"Otázka s nabodeníčky: "
print vyzva,
odpoved=raw_input()

-- 
geon
Vyjímka je pravidlo. Rekurzivní.

------------- další část ---------------
HTML příloha byla odstraněna...
URL: http://www.py.cz/pipermail/python/attachments/20050803/c23a7349/attachment.htm


Další informace o konferenci Python