【问题标题】:UnboundLocalError: local variable 'request' referenced before assignmentUnboundLocalError:分配前引用的局部变量“请求”
【发布时间】:2013-07-19 11:30:36
【问题描述】:

我用 Bottle 做了一个简单的程序。然而,我遇到了一个错误;

@route('/login')
def login_form():
 return '''<form method="POST" action="/login">
            What do you want to search for?<br>
            <input name="search" type="text" />
            <input type="submit" />
          </form>'''

@route('/login', method='POST')
 def PeopleSearch():
  raw = request.forms.get('search')
  query = urllib.urlencode ( { 'q' : 'who is '+raw } )


response = urllib.urlopen ( 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&' + query   ).read()                           
json = m_json.loads ( response )
results = json [ 'responseData' ] [ 'results' ]

for result in results :
    url = result['url']
    return (url)

进口是:

# -*- coding: cp1252 -*-
import codecs
from bottle import route, run, template, request
import Tkinter
from Tkinter import *
import turtle
import time
from xgoogle.search import GoogleSearch, SearchError
import urllib2
import urllib
import json as m_json
 import sys
from urllib import FancyURLopener
import time
from BeautifulSoup import BeautifulSoup
import json as simplejson

Soup = BeautifulSoup
from nltk import sent_tokenize, word_tokenize
from collections import Counter
from math import log10
# -*- coding: utf-8 *-*

现在这个程序应该返回 url,但它没有。它也抛出了我之前提到的错误。当我不在网页上运行它时,它工作得很好。

【问题讨论】:

  • 您没有显示代码的相关部分。您在某个函数内部进行了一些赋值,但由于 request 不是局部变量而失败。显示异常的完整回溯
  • 您的缩进看起来不对。 query = ... 行和response = ... 行应该在同一级别,不是吗?
  • 另外,returnfor 循环中很奇怪。
  • 我在正确导入的东西上也遇到了 unboundlocal 错误。我猜这与 python 调用这个脚本的方式有关

标签: python bottle


【解决方案1】:

-- 抱歉--我看到你的帖子上有标签 bottle。也许你还没有从瓶子里导入request 模块。确保你有:

from bottle import request, get

在脚本的开头。我真的很喜欢这个网页 (http://bottlepy.org/docs/dev/tutorial.html) 的瓶子 :)


您是否导入了urllib.request 库,看起来您可能没有?尝试在开始时导入它:

import urllib.request

文档中有大量关于此模块的有用信息:http://docs.python.org/3.4/library/urllib.request.html

【讨论】:

  • 我已经完成了所有必要的导入,它以前工作过。这不是打印请求。
  • 我没有看到 get 的导入,这通常是使用 HTTP 请求方法所必需的。已更新答案以包含 get
【解决方案2】:

您似乎缺少 request 模块导入。

你的脚本顶部有这个吗?

from bottle import request

【讨论】:

  • 它抛出错误 500:内部服务器错误
  • 如果缺少导入,错误将是NameError: global name 'request' is not defined,而不是UnboundLocalError
猜你喜欢
  • 2017-08-10
  • 2020-01-16
  • 2019-12-05
  • 2017-09-19
  • 2020-09-26
  • 2022-01-02
  • 2019-03-22
  • 2019-01-24
  • 2021-07-01
相关资源
最近更新 更多