Ich glaube, Sie verwechseln die Existenz einer Variablen und deren Wert.
Weder Codeschnipsel direkt überprüft das Vorhandensein der Variablen a
. Die ersten Snippets überprüfen ihren Wert. Wenn es nicht existiert, wird eine Ausnahme ausgelöst.
Der eingebaute in input()
Funktion im Code-Schnipsel 2 verwendet wird, unterscheidet sich in Python 2 & 3.
In Python 2 implizit eval()
auf, was Zeichenfolge durch die eingegeben wurde nennen würde benutzer so es konnte Eine NameError
Ausnahme auslösen, wenn eine Referenz auf eine nicht definierte Variable als Eingabe angegeben wurde (z. B. a
oder b * 42
).
Python 3 tut das nicht. Denn es macht nicht ist Rückkehr, was der Benutzer eingegeben-in als Zeichenfolge (ohne die folgenden Zeilen zum entsprechenden am Ende auf der Tastatur den Benutzer eingeben.
Die folgende Abbildung zeigt, wie für die Existenz einer Variablen überprüfen (und erhalten Sie seinen Wert, wenn es existiert) in Python 2 und 3. Beachten Sie, dass es davon ausgeht, dass die Variable a
niemals einen zulässigen Wert von None
haben könnte.
def check_existence_of_a():
try:
return a
except NameError:
return None
if check_existence_of_a() is None:
print('variable "a" does not exist')
else:
print('variable "a" exists and its value is {}'.format(a))
a = 42
if check_existence_of_a() is None:
print('variable "a" does not exist')
else:
print('variable "a" exists and its value is {}'.format(a))
Ausgang:
variable "a" does not exist
variable "a" exists and its value is 42
aktualisieren:
Verwendung von Python 2, Ihr zweiter Code-Schnipsel modifiziert werden könnte, wie unten gezeigt SyntaxError
s durch die Nutzer verursacht behandeln nichts Eingabe aber Geben Sie ein - was passiert, weil das dann dazu führt, dass es ruft eval("")
:
def get_a():
try:
a = input('>')
except SyntaxError:
print('illegal input encountered') # optional
return None
except NameError:
return 0
else:
return 1
get_a()
Alternativ können Sie aus wechseln input()
-raw_input()
mit, die nicht Anruf tut eval()
und stattdessen würde nur zurückkehren, die (möglicherweise leer) string
den Benutzer eingegeben.
Ich kann Ihre Frage nicht einmal weit genug verstehen, um zu versuchen, es zu bearbeiten. Bitte nehmen Sie die [Tour] und überprüfen Sie [fragen] - eine [MCVE], die das Problem neu erstellt, wäre sehr nützlich. – jonrsharpe
Keines dieser Snippets prüft die Existenz einer Variablen ... – ForceBru
Kannst du mir erklären, was das sind ?! –