2016-12-06 2 views
1

Der Code I bin mit hier gezeigt:Kann ich eine globale Variable am Anfang meines Codes verwenden, wenn ich sie am Ende meines Programms definiert habe?

import os.path 

def def1(): 
    global filename 
    if os.path.isfile(filename+ ".txt") == True: 
     print ("Filename exists") 
    if os.path.isfile(filename+ ".txt") == False: 
     print("Filename dosent exist") 

def def2(): 
    global filename 
    filename = input("Please input the name if the file you want to see exists") 

def Main(): 
    def1() 
    def2() 

Main() 

Was der Code tut, ist zu überprüfen, ob eine Datei vorhanden ist, und der Benutzer kann den Namen der Datei, die er/sie überprüfen will. Dieser Code wird in einer viel größeren Codedatei verwendet. Ich bin nicht in der Lage zu verstehen, warum ich diese Fehlermeldung erhalten, wenn ich den Code ausführen:

Traceback (most recent call last): 
File "/Users/Sid/Desktop/existfiletest.py", line 18, in <module> 
    Main() 
File "/Users/Sid/Desktop/existfiletest.py", line 15, in Main 
    def1() 
File "/Users/Sid/Desktop/existfiletest.py", line 5, in def1 
    if os.path.isfile(filename+ ".txt") == True: 
NameError: name 'filename' is not defined 

ich die Variable ‚Dateiname‘ definiert haben als globaler in def2(), aber ich starten Sie das Programm durch den Aufruf def1 aus (). Die Variable 'Dateiname' ist eine globale Variable, daher sehe ich nicht, warum sie in def1() nicht verwendet werden kann. Und wenn jemand sagt, def2() zuerst anzurufen, funktioniert das ja. Allerdings würde ich gerne wissen, ob ich eine Variable vor der Definition verwenden kann, wie dies in meinem größeren Code der Fall ist.

Vielen Dank im Voraus.

+0

Das gleiche geschieht. – Kronixion

+0

Wie können Sie eine Variable verwenden, bevor Sie sie definieren? Python ist kein alter Fortran. Aber selbst im alten Fortran ist der 'Typ' noch definiert. In Python können Sie eine Variable nicht verwenden, ohne sie zu definieren – wander95

Antwort

0

Verwenden Sie keine globalen Variablen. Es ist wirklich eine schlechte Übung. Verwenden Sie Funktionsargumente. Sie können Ihren Code folgendermaßen ändern:

import os.path 

def def1(filename): 
    if os.path.isfile(filename+ ".txt") == True: 
     print ("Filename exists") 
    if os.path.isfile(filename+ ".txt") == False: 
     print("Filename dosent exist") 

def def2(): 
    return input("Please input the name if the file you want to see exists") 

def Main(): 
    filename = def2() 
    def1(filename) 

Main() 

Und natürlich können Sie die Variable nicht verwenden, bevor Sie sie definieren. Aber Sie können es mit einem Standardwert definieren.

+0

Danke! Aber gibt es eine Möglichkeit, globale Variablen zu verwenden? Ich habe globale Variablen in meinem gesamten Code verwendet - dies ist nur ein kleiner Auszug dieses Codes. – Kronixion

+0

@Kronixion Sie müssen niemals globale Variablen verwenden. Aber wie gesagt, Sie können es mit einem Standardwert in 'def1' definieren –

0

die Dateinamen in der Hauptfunktion speichern und es dann wie so zum def1 Funktion übergeben:

import os.path 

def def1(filename): 
    if os.path.isfile(filename+ ".txt") == True: 
     print ("Filename exists") 
    if os.path.isfile(filename+ ".txt") == False: 
     print("Filename dosent exist") 

def Main(): 
    filename = input("Please input the name if the file you want to see exists") 
    def1(filename) 

Main() 
1

Sortieren Antwort:

ersetzen:

def Main(): 
     def1() 
     def2() 

von

def Main(): 
     def2() 
     def1() 

Ihr Fehler ist nicht die Tatsache, dass Sie die globale Variable früher in der Datei definiert haben. Aber indem Sie zuerst aufrufen, haben Sie die Variable undefined verlassen. Also müssen Sie def2 zuerst initialisieren und geben Sie einen Wert.

Zweitens brauchen Sie nicht die doppelte, wenn der Test auszuführen:

def def1(filename): 
    if os.path.isfile(filename+ ".txt") == True: 
      print ("Filename exists") 
    else: 
      print("Filename does not exist") 
Verwandte Themen