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
input <-> raw_input...
-
- User
- Beiträge: 670
- Registriert: Sonntag 15. Januar 2006, 18:42
- Wohnort: Celle
- Kontaktdaten:
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.
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.
eval ist aber auch pure evil....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...
Pydoc-Integration in vim - Feedback willkommen: http://www.vim.org/scripts/script.php?script_id=910
-
- User
- Beiträge: 196
- Registriert: Sonntag 1. Januar 2006, 20:12
- Wohnort: aus dem hohen Norden....
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
..."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
-
- User
- Beiträge: 670
- Registriert: Sonntag 15. Januar 2006, 18:42
- Wohnort: Celle
- Kontaktdaten:
Erstens: weil eval() durchaus seine Daseinsberechtigung hat, genauso wie exec, genauso wie input() das hatte.Wenn Python schon recht einfach ist, warum haben die sich grad hier´n Bein gestellt
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.