input <-> raw_input...

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Dienstag 24. Januar 2006, 16:53

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 :(
Zuletzt geändert von jens am Freitag 3. März 2006, 15:00, insgesamt 1-mal geändert.

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Dienstag 24. Januar 2006, 16:55

versteht ich auch nicht. Meiner meinung gehören die beide in die Tonne. sys.stdin.readline() tuts doch auch.
TUFKAB – the user formerly known as blackbird
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Dienstag 24. Januar 2006, 16:58

Ich hab mal unsere [wiki]Wunschliste[/wiki] aus dem alten Wiki, wieder reaktiviert :)

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Dienstag 24. Januar 2006, 17:39

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.
fs111
User
Beiträge: 170
Registriert: Samstag 15. November 2003, 11:42
Kontaktdaten:

Mittwoch 25. Januar 2006, 20:18

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....
Pydoc-Integration in vim - Feedback willkommen: http://www.vim.org/scripts/script.php?script_id=910
Andy
User
Beiträge: 196
Registriert: Sonntag 1. Januar 2006, 20:12
Wohnort: aus dem hohen Norden....

Mittwoch 25. Januar 2006, 20:21

Ja, auch ich war vor kurzem auf input reingefallen :evil: . Danke @BlackJack für die Aufklärung. :lol:

..."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
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Mittwoch 25. Januar 2006, 20:25

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.
Antworten