0

Pythonスクリプトの実行中に、次のタイプエラーが発生しました。

File "/Library/Python/2.7/site-packages/Flask-0.9-py2.7.egg/flask/app.py", line 1701, in __call__
return self.wsgi_app(environ, start_response)
File "/Library/Python/2.7/site-packages/Flask-0.9-py2.7.egg/flask/app.py", line 1689, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "/Library/Python/2.7/site-packages/Flask-0.9-py2.7.egg/flask/app.py", line 1687, in wsgi_app
response = self.full_dispatch_request()
File "/Library/Python/2.7/site-packages/Flask-0.9-py2.7.egg/flask/app.py", line 1360, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/Library/Python/2.7/site-packages/Flask-0.9-py2.7.egg/flask/app.py", line 1358, in full_dispatch_request
rv = self.dispatch_request()
File "/Library/Python/2.7/site-packages/Flask-0.9-py2.7.egg/flask/app.py", line 1344, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/Users/Zach/Dropbox/stock/stk.py", line 31, in stock
url="http://finance.yahoo.com/d/quotes.csv?s="+stock+"&f=snl1"
TypeError: cannot concatenate 'str' and 'function' objects

問題の原因となっている行はurl="http://finance.yahoo.com/d/quotes.csv?s="+stock+"&f=snl1"、具体的には変数のようです。stock.調査後、以前のエラーからわかったことから、原因は変数の定義方法に問題があるはずだと推測しました(文字列ではないか、定義されていない可能性があります)。まったく); そうは言っても、私はこの変数を前の関数で文字列として定義します。

@app.route('/', methods=['GET', 'POST'])
def home_search():
    if request.method == 'POST':
            stock = request.form['s']
            return redirect(url_for('stock'))

    return render_template('stk.html') 

そして、これが関数です。ここで、stock以前に定義された値を呼び出して表示しようとします。

@app.route('/stock', methods=['GET', 'POST'])
def stock():
    print type(stock)
    url="http://finance.yahoo.com/d/quotes.csv?s="+stock+"&f=snl1"
    text=urllib2.urlopen(url).read()

    return render_template('stock.html')

しかし、それは@app.route私がそれを呼ぶときとは異なる方法で定義されています。Pythonの変数は、そのように保存して呼び出すべきではありませんか、それとも新しいページが読み込まれるときに変数が空になりますか?この場合、回避策またはより良いアプローチの提案をいただければ幸いです。

4

1 に答える 1

2

名前付き関数は、他のすべてと同様に変数です。このstock行で使用されている :

    url="http://finance.yahoo.com/d/quotes.csv?s="+stock+"&f=snl1"

それを含む関数です。リクエスト全体で Python 変数に依存するべきではありません。代わりに、変数をリクエスト変数として渡す必要があります。

/stock?s=whatever

request.form次に、その URL のハンドラーでnew から読み戻します。


stock関数で作成している変数は、 へのhome_search呼び出しの間だけ存在するローカル変数でありhome_search、クライアントを別の URL ( など/stock) にリダイレクトするとすぐに終了します。

于 2012-10-18T05:20:14.413 に答える