Seite 1 von 1
input <-> raw_input...
Verfasst: Dienstag 24. Januar 2006, 16:53
von jens
Warum gibt es überhaupt
input, wenn es nichts anderes als
eval(raw_input(prompt)) ist?
Das kann man doch eigentlich nie brauchen! Und selbst wenn, könnte man die zwei Befehle auch selber kombinieren...
Ich finde das Konzeptionell nicht wirklich gelungen... Verleitet es doch IMHO gerade Einsteiger dazu input zu verwenden, weil es naheliegender als raw_input ist... Keine Frage, das input() eine riesen Sicherheitslücke durch eval() aufreist

Verfasst: Dienstag 24. Januar 2006, 16:55
von mitsuhiko
versteht ich auch nicht. Meiner meinung gehören die beide in die Tonne. sys.stdin.readline() tuts doch auch.
Verfasst: Dienstag 24. Januar 2006, 16:58
von jens
Ich hab mal unsere [wiki]Wunschliste[/wiki] aus dem alten Wiki, wieder reaktiviert

Verfasst: Dienstag 24. Januar 2006, 17:39
von modelnine
raw_input() ist noch ein bisschen was anderes als sys.stdin.readline(), da man bei letzterem keinen Prompt angibt, sondern einfach direkt eine Zeile von stdin liest. Ich finds persönlich unproblematisch die Unterscheidung zu lassen.
input() gehört aber definitiv in die Tonne, ja. Das macht viel zu viele Dinge die nicht einsichtig sind, und wenn's jemand umbedingt braucht dann kann er das ganze mittels sys._getframe(), eval() und raw_input() duplizieren.
--- Heiko.
Re: input <-> raw_input...
Verfasst: Mittwoch 25. Januar 2006, 20:18
von fs111
jens hat geschrieben:Warum gibt es überhaupt
input, wenn es nichts anderes als
eval(raw_input(prompt)) ist?
Das kann man doch eigentlich nie brauchen! Und selbst wenn, könnte man die zwei Befehle auch selber kombinieren...
Ich finde das Konzeptionell nicht wirklich gelungen... Verleitet es doch IMHO gerade Einsteiger dazu input zu verwenden, weil es naheliegender als raw_input ist...
eval ist aber auch pure evil....
Verfasst: Mittwoch 25. Januar 2006, 20:21
von Andy
Ja, auch ich war vor kurzem auf input reingefallen

. Danke @BlackJack für die Aufklärung.
..."Und anstelle von `input()` solltest Du `raw_input()` nehmen. Sonst könnte der Anwender auch sowas wie "os.remove('wichtige_datei.txt')" eingeben. Das wird bei `input()` dann ausgeführt!"...
Wenn Python schon recht einfach ist, warum haben die sich grad hier´n Bein gestellt
Gruss Andy
Verfasst: Mittwoch 25. Januar 2006, 20:25
von modelnine
Wenn Python schon recht einfach ist, warum haben die sich grad hier´n Bein gestellt
Erstens: weil eval() durchaus seine Daseinsberechtigung hat, genauso wie exec, genauso wie input() das hatte.
Zweitens: weil input aus einer Zeit stammt in der Python nicht als Allround-Sprache gedacht war, sondern als Shell-Ersatz eines verteilten Betriebssystems (nämlich ABC, an dem GvR in Holland am CNRI gearbeitet hat). Und man es genauso wie das Keyword print (was auch aus jener Zeit stammt) der Rückwärtskompatibilität wegen behalten hat.
--- Heiko.