Nieuws:

We zijn er weer.

Na lange tijd van afwezigheid zijn we er weer  :laugh:
We hebben alle wachtwoorden gereset, je oude wachtwoord werkt niet meer.Je moet via het "wachtwoord vergeten"-linkje je wachtwoord resetten. Je krijgt hiervoor een mailtje op het adres dat je bij ons geregistreerd hebt.

De komende tijd zijn we nog druk bezig om de rest van de site op te bouwen, dus het kan zijn dat sommige onderdelen (tijdelijk) niet werken.

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: [opgelost] [Python] Global vars  (gelezen 1522 keer)

Offline bramboos

  • Lid
  • Steunpunt: Nee
[opgelost] [Python] Global vars
« Gepost op: 2011/02/16, 14:16:16 »
Ik ben momenteel simpele programmas aan het schrijven in Python. Dit puur om er van te leren maar ik loop een beetje vast.

Ik heb een functie gemaakt genaamd opslaan(). Deze functie ziet er zo uit:
def opslaan():
    fi.open('info.gm','r')
    listme = fi.readlines()
    fi.close()
Maar nu krijg ik de error dat de global variabele fi 'not defined' is. Dus heb ik bovenaan de code global fi en in de functie ook global fi gedaan. Zo heb ik elke keer deze error weggewerkt alleen ik krijg nog steeds de error: "NameError: global name 'fi' is not defined".

Ik heb al op Google gekeken naar een oplossing maar niets gevonden.

Alvast dank voor de hulp  :)
« Laatst bewerkt op: 2011/02/16, 16:21:33 door bramboos »

Offline dvdmeer

  • Lid
    • Python-RandR :: dvdmeer.nl
  • Steunpunt: Nee
Re: [Python] Global vars
« Reactie #1 Gepost op: 2011/02/16, 14:32:04 »
def opslaan():
    fi = open('info.gm','r')
    listme = fi.readlines()
    fi.close()

En natuurlijk daar wel een try-except (IOError) blok omheenzetten :)

Offline bramboos

  • Lid
  • Steunpunt: Nee
Re: [Python] Global vars
« Reactie #2 Gepost op: 2011/02/16, 14:35:53 »

En natuurlijk daar wel een try-except (IOError) blok omheenzetten :)

Kun je dat misschien beter uitleggen? Ik ben nog maar 2 dagen bekend met Python ;)

Offline Ronnie

  • Artworkteam
    • ronnie.vd.c
  • Steunpunt: Nee
Re: [Python] Global vars
« Reactie #3 Gepost op: 2011/02/16, 14:39:10 »
Het gemakkelijkst is om de volgende code in een text editor te zetten met syntax kleuring, er staat flink wat uitleg in.

Neem vooral eens een kijkje bij de workshop python, die bijna elke week op IRC gegeven word
http://wiki.ubuntu-nl.org/community/mwanzo/Workshop/BasiscursusPython

def openen(bestandsnaam='info.gm'):
    '''
    De functie Openen, heeft 1 optioneel argument wat meegegeven kan worden
    Wordt de function zonder argument aangeroepen, dan gebruik het de default waarde (info.gm)
    Wordt de functie aangeroepen met argument, dan word deze gebruikt.
    Het argument is beschikbaar met de variabele 'bestandsnaam'
    '''
    # Deze functie opent een bestand en slaat de verwijzing naar dit bestand op in variabele/object 'f'
    # open() is een standaard functie in python
    f = open(bestandsnaam, 'r')

    # Met een geopend bestand kun je een aantal functies uitvoeren
    # In dit geval word de functie readlines() aangeroepen op de object 'f' (het geopende bestand)
    # De output van deze functie wordt op het scherm weergegeven met de standaard functie 'print'
    print f.readlines()

    # Met deze functie wordt het bestand weer gesloten
    # De functie wordt dus op het object 'f' uitgevoerd
    f.close()
    
mijn_bestand = 'mijn_bestand.txt' # Variabele, welke verwijst naar de bestandsnaam
openen()                          # Functie aanroep zonder argumenten, opent dus 'info.gm'
openen(mijn_bestand)              #Functie aanroep met argument, opent dus 'mijn_bestand.txt'
mijn_bestand = 'mijn_2e_bestand.txt' # Verander de waarde van de variabele 'mijn_bestand'
openen(bestandsnaam=mijn_bestand) # Een andere manier om een functie aan te roepen (argumentnaam=argumentwaarde)
# Dit opent en print het bestand 'mijn_2e_bestand.txt'

« Laatst bewerkt op: 2011/02/16, 14:41:51 door Ronnie »
Ben je ook blij dat Ubuntu zo toegankelijk en gratis is, en wil je graag net als ik iets terugdoen, kijk dan eens rond bij mwanzo, dé poort naar het bijdragen aan Ubuntu en haar gemeenschap!

Documentatie Terminal

Offline dvdmeer

  • Lid
    • Python-RandR :: dvdmeer.nl
  • Steunpunt: Nee
Re: [Python] Global vars
« Reactie #4 Gepost op: 2011/02/16, 14:58:16 »

En natuurlijk daar wel een try-except (IOError) blok omheenzetten :)

Kun je dat misschien beter uitleggen? Ik ben nog maar 2 dagen bekend met Python ;)

Misschien dan nog niet het perfecte moment om daar op in te gaan. Het komt er globaal gezien op neer dat je de fout wilt afvangen als het bestand dat je met open() opent niet bestaat.

Overigens staat er op de wiki een vertaald Python boek:
http://wiki.ubuntu-nl.org/community/ThinkPython

Offline bramboos

  • Lid
  • Steunpunt: Nee
Re: [Python] Global vars
« Reactie #5 Gepost op: 2011/02/16, 16:21:19 »
Neem vooral eens een kijkje bij de workshop python, die bijna elke week op IRC gegeven word
http://wiki.ubuntu-nl.org/community/mwanzo/Workshop/BasiscursusPython
Dat zal ik zeker doen, heel interessant.

Misschien dan nog niet het perfecte moment om daar op in te gaan. Het komt er globaal gezien op neer dat je de fout wilt afvangen als het bestand dat je met open() opent niet bestaat.

Overigens staat er op de wiki een vertaald Python boek:
http://wiki.ubuntu-nl.org/community/ThinkPython
Ik zal mij eerst eens wat verder gaan verdiepen in Python.

Het probleem is in ieder geval opgelost door fi = open() te doen in plaats van fi.open(). Bedankt allen voor de snelle antwoorden! :)

Offline MKe

  • Lid
  • Steunpunt: Nee
Re: [opgelost] [Python] Global vars
« Reactie #6 Gepost op: 2011/02/16, 17:23:55 »
Klopt. Door fi.open te doen dacht Python dat je een object had die je al in variabele fi had gestopt en die de methode 'open' had. Maar fi bevat in die regel nog niets, je wilt er juis een object (=filehandler) in zetten. Vandaar dus dat je fi=open moet doen. Zo wordt de filehandler geplaatst in variabele fi.