python flask中的全局变量声称,在使用它的5个函数中的1个函数使用它之前,正在引用它

python flask中的全局变量声称,在使用它的5个函数中的1个函数使用它之前,正在引用它,python,python-2.7,flask,jinja2,flash-message,Python,Python 2.7,Flask,Jinja2,Flash Message,在浏览器上查看我的页面时出现以下错误 File "/home/jsnyder10/Documents/45/flask/lib/python2.7/site-packages/flask/app.py", line 1997, in __call__ return self.wsgi_app(environ, start_response) File "/home/jsnyder10/Documents/45/flask/lib/python2.7/site-packages/flask

在浏览器上查看我的页面时出现以下错误

File "/home/jsnyder10/Documents/45/flask/lib/python2.7/site-packages/flask/app.py", line 1997, in __call__
    return self.wsgi_app(environ, start_response)
File "/home/jsnyder10/Documents/45/flask/lib/python2.7/site-packages/flask/app.py", line 1985, in wsgi_app
    response = self.handle_exception(e)
File "/home/jsnyder10/Documents/45/flask/lib/python2.7/site-packages/flask/app.py", line 1540, in handle_exception
    reraise(exc_type, exc_value, tb)
File "/home/jsnyder10/Documents/45/flask/lib/python2.7/site-packages/flask/app.py", line 1982, in wsgi_app
    response = self.full_dispatch_request()
File "/home/jsnyder10/Documents/45/flask/lib/python2.7/site-packages/flask/app.py", line 1614, in full_dispatch_request
    rv = self.handle_user_exception(e)
File "/home/jsnyder10/Documents/45/flask/lib/python2.7/site-packages/flask/app.py", line 1517, in handle_user_exception
    reraise(exc_type, exc_value, tb)
File "/home/jsnyder10/Documents/45/flask/lib/python2.7/site-packages/flask/app.py", line 1612, in full_dispatch_request
    rv = self.dispatch_request()
File "/home/jsnyder10/Documents/45/flask/lib/python2.7/site-packages/flask/app.py", line 1598, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
File "/home/jsnyder10/Documents/45/flask/lib/python2.7/site-packages/flask_login/utils.py", line 228, in decorated_view
    return func(*args, **kwargs)
File "/home/jsnyder10/Documents/jMessage/app/views.py", line 66, in admin_edit_groups
    if not g.user.admin:
UnboundLocalError: local variable 'g' referenced before assignment
下面是我使用Flask进行路由的python代码。第一个函数是我在每个管理路径中使用的代码,它工作得非常好,但是出于某种原因,管理编辑组路径抛出了这个错误。我缺少了什么

from flask import render_template, flash, redirect, session, url_for, request, \
    g, jsonify, send_from_directory

@app.route('/admin', methods=['GET', 'POST'])
@login_required
def admin():
    if not g.user.admin:
        flash('Page unacessible.')
        return redirect(url_for('index'))
    return render_template('admin.html',title='Admin') 

@app.route('/admin_edit_groups', methods=['GET', 'POST'])
@login_required
def admin_edit_groups():
    if not g.user.admin:
        flash('Page unacessible.')
        return redirect(url_for('index'))
    form = AddGroupForm()
    if request.method == 'POST' and form.validate():
        if not Group.query.filter_by(name=form.groupname.data).count()>0:
            g=Group(name=form.groupname.data)
            db.session.add(g)
            db.session.commit()
            flash('Added Group name ' + form.groupname.data)
        else:
            flash('Group: ' + form.groupname.data + ' already exists.')
    groups=Group.query.all()
    return render_template('admin_edit_groups.html',title='Admin', form=form, groups=groups)

您正在函数中使用另一个
g
,这将覆盖全局
g

if not Group.query.filter_by(name=form.groupname.data).count()>0:
    g=Group(name=form.groupname.data)  # Here it is, rename it.
    db.session.add(g)
    db.session.commit()

您正在函数中使用另一个
g
,这将覆盖全局
g

if not Group.query.filter_by(name=form.groupname.data).count()>0:
    g=Group(name=form.groupname.data)  # Here it is, rename it.
    db.session.add(g)
    db.session.commit()

如果全局变量出现在上面的代码中,那么为什么不使用它呢?上面的代码没有运行,然后重新分配变量吗?@0TT0如果它按照您所说的那样工作,那么它将更加模糊。您需要仔细检查代码,以确定它是全局代码还是本地代码。如果你有一个大的功能,这将是一场灾难。非常感谢你看到这一点。我没有注意到我在函数中也使用了g。我也不明白为什么这样会抛出一个错误,尽管我很高兴这样做,但这确实会破坏我的全局g。如果它出现在代码中,为什么不使用全局变量呢?如果上面的代码没有运行,然后重新分配变量吗?@0TT0如果它像你说的那样工作,它将更加模糊。您需要仔细检查代码,以确定它是全局代码还是本地代码。如果你有一个大的功能,这将是一场灾难。非常感谢你看到这一点。我没有注意到我在函数中也使用了g。我也不明白为什么会抛出一个错误,即使我很高兴它这样做了,这将真正打破我的全球g。