Anfänger: Input erzeugt Fehler

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
Hartmannsgruber
User
Beiträge: 89
Registriert: Mittwoch 15. Januar 2014, 22:30
Wohnort: Bad Kötzting
Kontaktdaten:

Guten Morgen,

ich habe mal wieder ein sehr wahrscheinlich leichtes Problem, weiß aber keinen Rat :(
Also, ich gebe einen Text von der Konsole ein:

Code: Alles auswählen

apfel = input("eingabe:")
apfel = str(apfel)
print(apfel)
anstatt das nun mein eingegebener Text ausgegeben wird, erscheint diese Fehlerrmeldung:
Traceback (most recent call last):
File "hallo.py", line 1, in <module>
apfel = input("eingabe:")
File "<string>", line 1, in <module>
NameError: name 'h' is not defined

Bei allen anderen kleinen Programmen hat das bisher immer Funktioniert, warum hier nicht?
Kann es was zu tun haben das ich von Windows zu Opensuse gewechselt bin?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Kann es sein, dass du neben dem Betriebssystem noch die Python-Version gewechselt hast? Von Python3 zu Python2?
In Python2 ist `print` keine Funktion (Klammern weg!) und `input` entspricht `eval(raw_input())`, sprich: Die Eingabe muss gueltiger Python-Code sein.

Python3 ist nicht kompatibel mit Python2 und man sollte aufpassen, wenn man zwischen den beiden wechselt.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Mit anderen Worten:

Python 2

Code: Alles auswählen

>>> print input('eingabe: ')
eingabe: h
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 1, in <module>
NameError: name 'h' is not defined
>>> h = 'Topaz'
>>> print input('eingabe: ')
eingabe: h
Topaz
Python 3

Code: Alles auswählen

>>> print(input('eingabe: '))
eingabe: h
h
mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Und die Moral aus der Geschicht': In der "zweier" verwende ``input`` nicht! :-P

(Im Klartext: Bei Python 2.x verwende immer ``raw_input`` und niemals ``input``!)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Hartmannsgruber
User
Beiträge: 89
Registriert: Mittwoch 15. Januar 2014, 22:30
Wohnort: Bad Kötzting
Kontaktdaten:

Aus der Moral hab ich mir entnommen: :D
egal ob groß oder klein,
Versionsnummern bringen oft einen Zwirl hinein xDD

Vielen Dank an alle, habe den Interpreter auf 3.3 gestellt, jetzt läuft mein Skript :-)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Hartmannsgruber hat geschrieben: Vielen Dank an alle, habe den Interpreter auf 3.3 gestellt, jetzt läuft mein Skript :-)
Dann brauchst Du aber keine Umwandlung in einen String mehr! Lass Dir mal den Typen ausgeben (``type()``), den ``input()`` zurückliefert. Kleiner Tipp: ``input`` ist das "alte" ``raw_input``... ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten