Variable global y matraz de python

Lo que quiero hacer es mostrar el primer evento de una API. La variable se llama “firstevent” y el valor debe aparecer en la página web. Pero el primer evento está dentro de una definición, por lo que lo convierto en una variable global y espero que pueda usarse en diferentes funciones. Pero muestra “NameError: el nombre global ‘firstevent’ no está definido”. Esto es lo que estoy haciendo:

definir una variable global

global firstevent 

envía a esta variable un valor aleatorio, se supone que son events['items'][1]['end']

 firstevent = 1 

mostrando el valor del primer evento en el sitio web.

 @app.route("/") def index(): return 'User %s' % firstevent 

No estoy seguro de lo que está sucediendo ahora, ¿quizás sea un problema de scope? He comprobado muchas respuestas en línea pero todavía no puedo encontrar la solución.

Aquí están los detalles (no todo el código)

 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='XXXX@gmail.com', text='Appointment at Somewhere on June 3rd 10am-10:25am').execute() events = calendar.events().list(calendarId='XXXX@gmail.com').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 """ 

Welcome to page 2

This is just amazing!

""" # start the webserver if __name__ == "__main__": app.debug = True app.run()

Sí, es un problema de scope. Al comienzo de su función main() , agregue esto:

 global firstevent 

Eso debería hacerlo. Cualquier variable que no esté definida dentro de una función, es global. Puedes acceder directamente desde cualquier función. Sin embargo, para modificar la variable necesitará escribir global var en su función.

Ejemplo

Esto crea una variable local “firstevent” en la función:

 firstevent = 0 def modify(): firstevent = 1 

Y esto modifica la variable global ‘firstevent’

 firstevent = 0 def modify(): global firstevent firstevent = 1