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

Python循环中全局变量timestamp持续重置导致Excel索引异常问题求助

问题根源:导入的变量与模块全局变量不同步

你遇到的这个问题,核心原因是**from dataGet import * 会把模块中的变量复制到当前脚本的命名空间,而不是引用模块里的原始变量**。也就是说,你主脚本里的 timestamp 和 dataGet 模块里的 timestamp 是两个完全独立的变量:

  • 当你调用 getTimestamp() 时,函数修改的是 dataGet 模块内部的全局 timestamp;
  • 但你创建 DataFrame 时使用的是主脚本里已经导入的、初始值为0的 timestamp,自然会得到1969/12/31这个Unix时间戳0对应的日期。

非循环场景下正常,大概率是因为你在单次执行中,导入后立即调用函数并使用,没触发命名空间的变量隔离问题。


解决方案1:避免全局变量,让函数返回时间戳(推荐)

全局变量很容易引发这类作用域混乱,最佳实践是让 getTimestamp() 直接返回获取到的时间戳,彻底摆脱全局变量依赖:

修改 dataGet.py:

def getTimestamp():
    return int(client.get_server_time()['serverTime'])/1000

主脚本中调用并使用返回值:

# 替换原有的 getTimestamp() 调用
current_timestamp = getTimestamp()
# 创建DataFrame时直接使用这个返回值
df = pd.DataFrame(holdings, index=[datetime.datetime.fromtimestamp(current_timestamp).strftime('%Y/%m/%d')])

这种写法代码更清晰,也从根源上避免了作用域问题。


解决方案2:导入模块而非直接导入变量

如果一定要保留全局变量的写法,可以改为导入整个模块,通过模块访问变量,确保每次用的都是模块内部的最新值:

主脚本修改导入语句:

import dataGet

调用函数和使用变量时:

dataGet.getTimestamp()
# 创建DataFrame时直接访问模块里的timestamp
df = pd.DataFrame(holdings, index=[datetime.datetime.fromtimestamp(dataGet.timestamp).strftime('%Y/%m/%d')])

这样就能直接使用 dataGet 模块里被函数修改后的 timestamp 值,不会出现变量不同步的问题。


解决方案3:重新导入变量(不推荐)

如果坚持使用 from dataGet import *,可以在调用 getTimestamp() 后重新导入 timestamp,但这种写法不够优雅,且容易出错:

getTimestamp()
# 重新导入最新的timestamp值
from dataGet import timestamp

不建议用这种方法,会增加代码复杂度,不如前两种方案简洁可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 11:52:27