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

Python代码在Google部署失败返回500错误求助

问题

将Python代码部署到Google平台,用于VBA调用获取运行结果。代码在PyCharm本地运行正常,但部署后返回500错误。

依赖要求

scipy
flask==2.0.3
werkzeug==2.0.3
pandas
numpy
statsmodels
google-cloud-storage

部署的Python代码

from statsmodels.stats.multicomp import pairwise_tukeyhsd
from google.cloud import storage


def tukey_hsd(request):
    # Initialize the storage client
    storage_client = storage.Client()
    bucket_name = "your-bucket-name"  # Replace with your GCS bucket name
    bucket = storage_client.bucket(bucket_name)
    
    # Load the CSV file into a DataFrame
    # For cloud function testing, you can simulate data instead of loading a CSV file from local disk
    data = pd.DataFrame({
        0: [5, 5.5, 6, 7, np.nan],
        1: [6, 7, 8, np.nan, 9],
        2: [7, 8, 9, 8.5, np.nan]
    })

    # Prepare values and groups arrays
    values = []
    groups = []
    group_names = ['Group1', 'Group2', 'Group3']

    for i, group_name in enumerate(group_names):
        # Convert all values in the column to numeric, setting non-numeric values to NaN
        numeric_col = pd.to_numeric(data[i], errors='coerce')

        # Drop missing (NaN) values
        col_values = numeric_col.dropna().values

        # Add to values list and assign group labels
        values.extend(col_values)
        groups.extend([group_name] * len(col_values))

    # Convert lists to NumPy arrays
    values = np.array(values)
    groups = np.array(groups)

    # Perform Tukey HSD test
    tukey_result = pairwise_tukeyhsd(endog=values, groups=groups, alpha=0.05)

    # Convert results to DataFrame and extract p-adj values
    summary_df = pd.DataFrame(data=tukey_result.summary().data[1:], columns=tukey_result.summary().data[0])
    p_adj_values = summary_df["p-adj"]

    # Save p-adj values as a CSV in-memory file
    csv_data = p_adj_values.to_csv(index=False, header=False)

    # Define the destination blob name and upload the CSV data
    blob = bucket.blob("p_adj_values.csv")
    blob.upload_from_string(csv_data, content_type="text/csv")

    # Return a response indicating the file was saved
    return json.dumps({"message": "p-adj values saved to Google Cloud Storage"}), 200, {"Content-Type": "application/json"}

问题排查与修复方案

1. 补充缺失的模块导入

代码中使用了pd(pandas)、np(numpy)和json模块,但未显式导入——本地PyCharm环境可能已全局安装这些模块,而云函数是隔离环境,必须显式声明。修改代码开头:

from statsmodels.stats.multicomp import pairwise_tukeyhsd
from google.cloud import storage
import pandas as pd
import numpy as np
import json

2. 配置云函数服务账号权限

确保云函数关联的服务账号拥有Google Cloud Storage存储桶的读写权限:

  • 进入Google Cloud控制台IAM页面
  • 找到云函数默认使用的服务账号(格式一般为PROJECT_ID@appspot.gserviceaccount.com)
  • 为其添加Storage Object Creator和Storage Object Viewer角色,保障文件读写权限

3. 验证依赖安装兼容性

确认requirements.txt中的依赖版本无冲突,云函数部署时会自动安装该文件内的依赖。若部署时出现安装失败,需检查版本匹配(比如flask与werkzeug的版本兼容性)。

4. 查看云函数日志定位具体错误

云函数的日志会记录详细错误堆栈,是排查500错误的核心依据:

  • 进入云函数详情页,切换到「日志」标签
  • 触发函数后,查看日志中的具体报错信息(如导入失败、权限拒绝、数据处理异常等)

5. 添加异常捕获增强容错性

在数据处理逻辑中添加异常捕获,避免因意外数据导致崩溃,同时返回明确错误信息:

try:
    # 原数据处理、Tukey检验、文件上传逻辑
except Exception as e:
    return json.dumps({"error": str(e)}), 500, {"Content-Type": "application/json"}

内容的提问来源于stack exchange,提问作者user3387046

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 13:26:05