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

测试exec()函数遇异常:无法获取last_trade_id数值,请求协助

解决exec()测试时无法提取last_trade_id的问题

看起来你在测试exec()函数对接主程序的时候,踩了几个典型的坑——想从类似心跳数据里提取last_trade_id的数值,结果要么拿到None,要么输出一堆混乱的截断内容,我来帮你拆解问题并给出解决方案:

问题根源分析

你遇到的情况大概率是两个原因:

  1. 把JSON字符串直接丢给exec()执行:JSON的语法和Python字典不完全一致(比如JSON用双引号包裹键,而Python里直接写双引号会被当成字符串),直接执行会触发语法错误,导致代码执行不完整,变量没正确赋值,甚至输出截断的错误信息。
  2. exec()的变量作用域没处理好:即使代码能执行,也可能因为变量没有暴露到当前作用域,导致你后续访问时拿到None。

正确解决方案

优先方案:用JSON解析替代exec()

exec()是执行Python代码的工具,而你处理的是JSON格式的数据,完全没必要用exec()来做这件事,直接用json模块解析更安全、更简单:

import json

# 假设你的原始数据是这样的字符串
raw_data = '{"last_trade_id": 13621701, "product_id": "BTC-EUR", "sequence": 3542855617, "time": "2018-04-01T18:38:32.455000Z", "type": "heartbeat"}'

# 解析成Python字典
data_dict = json.loads(raw_data)

# 直接提取目标字段
last_trade_id = data_dict["last_trade_id"]
print(last_trade_id)  # 输出:13621701

如果必须用exec()(主程序依赖)

如果因为主程序架构必须用exec()测试,那要确保执行的是合法的Python代码,并且正确处理变量作用域:

import json

raw_data = '{"last_trade_id": 13621701, "product_id": "BTC-EUR", "sequence": 3542855617, "time": "2018-04-01T18:38:32.455000Z", "type": "heartbeat"}'
data_dict = json.loads(raw_data)

# 用exec将目标值赋值给变量b
exec('b = data_dict["last_trade_id"]')

# 现在可以正常访问b了
print(b)  # 输出:13621701

或者如果你想直接用字符串构造exec的代码,要先把JSON转成Python兼容的字典语法:

raw_data = '{"last_trade_id": 13621701, "product_id": "BTC-EUR", "sequence": 3542855617, "time": "2018-04-01T18:38:32.455000Z", "type": "heartbeat"}'
# 把JSON的双引号替换成单引号,变成合法的Python字典代码
python_compatible_str = raw_data.replace('"', "'")

# 执行代码,将数据存入字典变量
exec(f'data = {python_compatible_str}')

# 提取目标字段
last_trade_id = data["last_trade_id"]
print(last_trade_id)

额外提醒

exec()是一个风险较高的函数,尤其是处理外部来源的数据时,容易引发注入攻击。如果不是主程序架构强制要求,尽量用常规的变量赋值、JSON解析来替代exec(),既安全又容易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:02:55