You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署集成Spotipy的Flask API到Google Cloud时触发raw_input未定义错误的排查求助

部署集成Spotipy的Flask API到Google Cloud时触发raw_input未定义错误的排查求助

大家好,我遇到了一个棘手的问题,想请社区的朋友们帮忙排查一下。我开发了一个Flask API,用来对接前端和Spotify API,本地运行一切正常,但部署到Google Cloud之后,调用/createPlaylist这个POST接口时就抛出了500错误,错误根源来自Spotipy包,具体报错信息如下:

"POST /createPlaylist" 500

ERROR in app: Exception on /createPlaylist [POST]

Traceback (most recent call last):
    File "/layers/google.python.pip/pip/lib/python3.11/site-packages/spotipy/oauth2.py", line 115, in _get_user_input
      return raw_input(prompt)
             ^^^^^^^^^
NameError: name 'raw_input' is not defined

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
    File "/layers/google.python.pip/pip/lib/python3.11/site-packages/flask/app.py", line 2190, in wsgi_app
      response = self.full_dispatch_request()
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/layers/google.python.pip/pip/lib/python3.11/site-packages/flask/app.py", line 1486, in full_dispatch_request
      rv = self.handle_user_exception(e)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/layers/google.python.pip/pip/lib/python3.11/site-packages/flask/app.py", line 1484, in full_dispatch_request
      rv = self.dispatch_request()
           ^^^^^^^^^^^^^^^^^^^^^^^
    File "/layers/google.python.pip/pip/lib/python3.11/site-packages/flask/app.py", line 1469, in dispatch_request
      return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/workspace/main.py", line 43, in create_playlist
      creation_response = sp.user_playlist_create(
      ...

我针对这个问题做了一些调研,也尝试参考Spotipy官方的Flask服务示例来调整我的代码,但还是没能解决这个报错。以下是我目前的完整代码:

from flask import Flask, request, redirect, jsonify, session
from flask_session import Session
import os
import spotipy
from spotipy.oauth2 import SpotifyOAuth, SpotifyClientCredentials
from concurrent.futures import ThreadPoolExecutor, as_completed
from interactions import (
    filterTracks,
    generateCustomTitle,
    generateNewTracksForReinforcement,
)

app = Flask(__name__)

scopes = [
    "ugc-image-upload",
    "playlist-read-private",
    "playlist-read-collaborative",
    "playlist-modify-public",
    "playlist-modify-private",
]

client_id_var = os.getenv("SPOTIFY_CLIENT_ID")
client_secret_var = os.getenv("SPOTIFY_CLIENT_SECRET")

client_credentials_manager = SpotifyClientCredentials(
    client_id=client_id_var, client_secret=client_secret_var
)

app.config["SESSION_TYPE"] = "filesystem"
Session(app)

sp = spotipy.Spotify(
    client_credentials_manager=client_credentials_manager,
    auth_manager=SpotifyOAuth(
        client_id=client_id_var,
        client_secret=client_secret_var,
        redirect_uri="https://sound-scout-flask-api.nw.r.appspot.com/callback",
        scope=scopes,
        show_dialog=True,
        cache_handler=spotipy.FlaskSessionCacheHandler(app),
    ),
)

@app.route("/")
def sign_in():
    auth_url = sp.auth_manager.get_authorize_url()
    return redirect(auth_url)

@app.route("/callback")
def callback():
    sp.auth_manager.get_access_token(request.args.get("code"))
    return redirect("https://sound-scout-flask-api.nw.r.appspot.com/createPlaylist")

@app.route("/createPlaylist", methods=["POST"])
def create_playlist():
    data = request.get_json()
    promptAnswer = data.get("promptAnswer")
    playlistSubject = data.get("playlistSubject")
    playlistTitle = generateCustomTitle(promptAnswer).replace('"', "")
    tracks = filterTracks(promptAnswer)
    
    user_id = sp.current_user()["id"]  # Get current user's ID
    
    creation_response = sp.user_playlist_create(
        user=user_id,
        name=playlistTitle,
        public=False,
        collaborative=True,
        description=playlistSubject,
    )
    
    if creation_response:
        playlist_id = creation_response["id"]
        playlistURL = creation_response["external_urls"]["spotify"]
        track_ids = getTrackIds(tracks)
        result_url = addTrackToPlaylist(playlist_id, playlistURL, track_ids)
        reinforcePlaylistResults(playlistURL, 15, promptAnswer, playlistSubject)
        return jsonify({"playlistURL": result_url}), 200
    else:
        return jsonify({"error": "Playlist creation failed"}), 400

def getTrackId(track_name: str, track_artist: str):
    ...

if __name__ == "__main__":
    app.run(debug=True)

有没有朋友能帮我看看问题出在哪?非常感谢!

备注:内容来源于stack exchange,提问作者Braz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 10:59:53