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

如何在Python中用pyephem的getattr()访问ephem.Body字段且不调用eval()

解决方案

当然有!完全可以通过两次调用getattr()来替代eval(),既安全又符合Python风格,还更简洁。

修改后的第二部分代码:

body = 'Sun'
altaz = ['alt','az']
# 先获取天体类并实例化,避免循环里重复创建实例
body_instance = getattr(ephem, body)(o)
for a in altaz:
    print(a, getattr(body_instance, a))

代码说明:

  • 第一步getattr(ephem, body):从ephem模块中取出名为body(这里是'Sun')的类,也就是ephem.Sun
  • 接着调用这个类并传入观察者对象o,得到天体的实例body_instance
  • 最后循环altaz列表,用getattr(body_instance, a)直接获取实例的alt或az属性,完全不需要eval()

这样不仅消除了eval()带来的安全风险(比如如果body或a是不可信输入的话,eval()会执行恶意代码),代码逻辑也更清晰易懂。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 09:21:00