Flacon global à variables et python
Ce que je veux faire est de simplement afficher les firstevent à partir d'un API. La variable est appelée “firstevent” et la valeur d'affichage sur la page web. Mais firstevent est à l'intérieur d'un def, donc je les changer en une variable globale et d'espoir, il peut être utilisé dans différentes fonctions. Mais il montre “NameError: nom global de "firstevent" n'est pas défini”. C'est ce que je fais:
définir une variable globale
global firstevent
envoyer cette variable une valeur aléatoire, elle devait être events['items'][1]['end']
firstevent = 1
affichage firstevent de la valeur sur le site web.
@app.route("/")
def index():
return 'User %s' % firstevent
Je ne suis pas sûr de ce qui se passe maintenant, c'est peut-être un problème de portée? J'ai vérifier plusieurs réponses en ligne, mais ne peut toujours pas trouver la solution.
Voici les détails(pas tout le code)
import os
# Retrieve Flask, our framework
# request module gives access to incoming request data
import argparse
import httplib2
import os
import sys
import json
from flask import Flask, request
from apiclient import discovery
from oauth2client import file
from oauth2client import client
from oauth2client import tools
from apiclient.discovery import build
from oauth2client.client import OAuth2WebServerFlow
import httplib2
global firstevent
app = Flask(__name__)
def main(argv):
# Parse the command-line flags.
flags = parser.parse_args(argv[1:])
# If the credentials don't exist or are invalid run through the native client
# flow. The Storage object will ensure that if successful the good
# credentials will get written back to the file.
storage = file.Storage('sample.dat')
credentials = storage.get()
if credentials is None or credentials.invalid:
credentials = tools.run_flow(FLOW, storage, flags)
# Create an httplib2.Http object to handle our HTTP requests and authorize it
# with our good Credentials.
http = httplib2.Http()
http = credentials.authorize(http)
# Construct the service object for the interacting with the Calendar API.
calendar = discovery.build('calendar', 'v3', http=http)
created_event = calendar.events().quickAdd(calendarId='[email protected]', text='Appointment at Somewhere on June 3rd 10am-10:25am').execute()
events = calendar.events().list(calendarId='[email protected]').execute()
#firstevent = events['items'][1]['end']
firstevent = 1
#print events['items'][1]['end']
# Main Page Route
@app.route("/")
def index():
return 'User %s' % firstevent
# Second Page Route
@app.route("/page2")
def page2():
return """<html><body>
<h2>Welcome to page 2</h2>
<p>This is just amazing!</p>
</body></html>"""
# start the webserver
if __name__ == "__main__":
app.debug = True
app.run()
source d'informationauteur user2592038
Vous devez vous connecter pour publier un commentaire.
Yep, c'est un champ de problème. Au début de votre
main()
fonction, ajoutez ceci:Qui devrait le faire. Toute variable qui n'est pas définie à l'intérieur d'une fonction, est une mondial. Vous pouvez y accéder directement à partir de n'importe quelle fonction. Toutefois, pour modifier la variable que vous aurez besoin d'écrire
global var
dans votre fonction.Exemple
Cela crée une variable locale "firstevent" sur la fonction:
Et cela modifie la variable globale 'firstevent'