Python - Kontrolle für Null-Objekt
Ich bin neu in Python und ich verstehe nicht, wie das funktioniert. Ich möchte einen Wert zuweisen, der auf ein Objekt in Python, wenn es ist derzeit nicht definiert, aber wenn ich die if-Anweisung fehlschlägt, da das Objekt nicht definiert ist (Duh.).
Wie würde ich das beheben?
...
key = raw_input('What is your key?: ')
for i in key:
print i
if Count is None:
Count = 0
Traceback (most recent call last):
File "Client.py", line 7, in <module>
if Count is None:
NameError: name 'Count' is not defined
Was kann ich tun, um fix dieses scheinbar einfache Problem?
Den obigen code war Müll und das war etwas, was ich getestet und für das Verständnis der grundlegenden Python-Funktionalität. Es brachte mich zurück zu der Frage der Zuweisung eines Wertes zu einem Objekt, das ist eine Frage, die ich vorher hatte. Unten ist mein Gedankengang.
Ok, also offensichtlich bin ich nicht etwas erklären gut genug hier. Ich bin mir nicht sicher, was es ist, aber etwas ärgert mich darüber, dass Sie einen Wert zuweisen zu einem Objekt ist noch nicht relevant.
Zur besseren Lesbarkeit allein, ich möchte überprüfen, ob ein null-Wert für ein Objekt, bevor es in einer Anweisung verwendet werden. Von dem, was ich gelesen habe unten, es wird notwendig sein, und etwas, was ich bin wahrscheinlich nur zu haben, zu behandeln. In meinem Kopf, diese...
...
object = 'ObligatoryValue'
for i in Data
Object = Data[0] # Now the object is relevant
...
sieht besser aus als diese...
...
for i in Data
if Object is None:
Object = Data[0]
...
Noch weiter zu erklären, die denken, ich arbeite in der Daten-manipulation. Und das erste mal, ich lief in dieses Problem war, als ich zum Vergleich zweier Objekte. Wenn versucht, etwas zu tun, wie...
...
Object = Line[0]
if UndefinedObject == Object
do = 'something'
...
Aber ich würde mir immer ein Fehler zurückgegeben, da die UndefinedObject wurde kein Wert zugeordnet.
- Was ist Zählen ?
- Das können Sie nicht. Abtretung definieren den Namen. Sie können überprüfen, ob eine Globale zugewiesen wurde, aber Sie in der Regel nicht. Was ist dein Anwendungsfall?
- Sie können zuweisen
None
zuCount
ersten; hinzufügenCount = None
an der Spitze, aber es gibt litte Punkt, wirklich. - das Objekt ist, das würde ich gern überprüfen Sie den Wert. Ich würde gerne einen Wert zuweisen, wenn es nicht zuvor ein Wert zugewiesen.
- Warum müssen Sie das tun? Warum nicht zuordnen, es zu beginnen?
- Was wäre die beste Methode für diese Art der logischen progression?
- Ich möchte nicht einen Wert zuweisen, der auf ein Objekt, bis es einen Eigenwert hat, das wäre in diesem Fall in der for-Anweisung.
- Wenn das Objekt hat keinen inneren Wert, vor diesem Punkt, was ist da zu prüfen? Geben Sie einfach
Count = 0
unbedingt in den loop. Wenn es nicht schon ein Wert an sich, sondern, dass intrinsische Wert "leer" ist, erstellen Sie es, bevor die Schleife mit dem WertNone
wie in Martijn Antwort. In anderen Worten, die normale Python-code-Karten "hat einen Wert an sich" zu "ist eine variable". - Aber warum willst du nicht einen Wert zuweisen? Das ist das, was explizit zuweisen
None
ist für. - Bitte Lesen Sie Was ist das XY-problem. Es gibt offensichtlich einige Grund, warum Sie wollen, dies zu tun. Wenn wir wüssten, dass Grund, würde ich über die Quote von 1000:1 konnten wir erklären, um Ihnen eine bessere Weise, das gleiche zu tun.
- Es ist etwas über Vorherige Zuordnung, die ich nicht mag. Es macht keinen Sinn für mich, dass ich würde haben einen Wert zuweisen, um das Objekt außerhalb der Erklärung, in der es noch Wert. Ich fasse meine Gedanken dazu in meinem ursprünglichen post.
- Normalerweise werden Sie nicht haben, um einen Wert zuzuweisen, der außerhalb der Aussage. Sie brauchen nur zu tun hier, weil Sie wollen, zu prüfen, "null-Objekt", und das null-Objekt ist ein Wert, so ordnen Sie es so können Sie später überprüfen. Sie setzen diesen Anspruch an sich selbst, sehr wahrscheinlich, weil eine größere design-Auswahl in den code, den Sie sind tatsächlich versucht, zu schreiben.
- Ich arbeite stark in der Daten/Datei-manipulation. Ein Interesse an der Programmierung sehe ich Teile meiner Daten-entry-position, die automatisiert werden können. Das erste mal, ich lief in dieses Problem war, als ich zum Vergleich zweier Objekte, aber ich konnte nicht die Anweisung return true false, weil das Objekt sei nicht definiert.
- Wenn Sie "vergleicht zwei Objekte" die Objekte können nicht undefiniert sein. Es gibt keine Möglichkeit zu vergleichen, die ein nicht definiertes Objekt, oder irgendetwas anderes tun, die mit einem undefinierten Objekt, denn es ist kein Ausdruck in Python, das verweist auf ein nicht definiertes Objekt. Es gibt Ausdrücke, die sich auf null-Objekten (
None
), und Ausdrücke, die keinen Bezug zu irgendetwas, weil Sie Fehler, aber keiner von denen ist ein nicht definiertes Objekt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie festlegen
Count
zuNone
ausdrücklich, ersten:aber in diesem Fall wäre es einfacher, einfach zuweisen
0
zu beginnen mit:Dies ist fast sicher eine sehr schlechte Idee. Wie jeder erklärt in den Kommentaren, und Martijn Pieters Antwort zeigt, gibt es einen besseren Weg, um fast alles, was Sie tun wollen.
Dies ist auch nicht "Null-Objekt". Das "null-Objekt" ist
None
. Martijn ' s Antwort zeigt, wie das zu tun. Dies ist die überprüfung für eine variable, die nicht gebunden wird, auf alle, nicht für eine variable gebunden werden, um das null-Objekt.Sowieso, Python hindert Sie nicht daran, dies zu tun, es funktioniert einfach nicht machen es einfach (weil es fast immer eine schlechte Idee, aber gelegentlich notwendig).
So, hier ist, wie es zu tun:
Oder, wenn Sie brauchen, um zu wissen, ob es existiert, in einem bestimmten Bereich—z.B., Sie kümmert sich nur, ob es eine globalen
Count
, nicht einCount
überall:Oder verwenden Sie
hasattr
odergetattr
auf den entsprechenden namespace.undefined
ist idiomatischer und gemeinsame, richtig? Erklären Sie, was Sie tatsächlich versuchen zu tun, und wir können Ihnen zeigen, wie es auch in Python, anstatt zu zeigen, wie Sie die Verwendung von Python als eine schlechte version von JavaScript.Könnte man es definieren als eine leere Zeichenfolge, bevor Sie prüfen können:
dann kann man später testen...
None
, die idiomatischen "leeren Wert" in Python, wie bereits gezeigt, n Martijn Pieters Antwort?not Count
gilt nicht nur für0
wie es für''
.not Count
wird immer noch wahr sein, wenn du es auf0
. Numerische null ist auch false, so dass Ihre version eingestelltCount
0 perpetualy, es sei dennCount
zugeordnet ist, die anderen Werte später auf.