SkyCoord报错:list/Series对象无SkyCoord属性 循环查询Simbad恒星问题
报错根因
- 核心问题是变量名冲突覆盖:你最初导入时将
astropy.coordinates模块重命名为coord,后续你定义存储恒星坐标的列表时也用了coord作为变量名,此时全局作用域内的coord变量已经从模块对象被替换为普通列表,调用coord.SkyCoord自然会触发列表无该属性的报错。 - 后续原有单星测试代码也报错的原因是:Jupyter等交互式环境的变量是全局共享的,错误代码块运行后已经修改了全局
coord的指向,只有重启内核清空全局变量才会恢复。你之前遇到的'Series'对象无对应属性的报错也是同一原因,是当时你给和模块/类同名的变量赋值了Series对象导致的覆盖。
修复方法
- 重命名存储坐标的列表,避免和导入的模块名重名,比如改为
star_coords、coord_list均可 - 你的
C中存储的元素本身已经是SkyCoord类型,不需要反复嵌套SkyCoord()做类型转换,直接传入查询方法即可,减少冗余代码
修改后可运行的参考代码
from astroquery.simbad import Simbad from astroquery import open_exoplanet_catalogue as oec from astroquery.open_exoplanet_catalogue import findvalue import astropy.units as u import astropy.coordinates as coord from astropy.coordinates import SkyCoord import numpy as np import pandas as pd # 初始化存储结果的DataFrame exoplanet_stars = pd.DataFrame(columns=["恒星名称", "系外行星数量", "系外行星ID"]) ie = [ID[0], ID[1]] # 修改变量名,避免和导入的coord模块冲突 coord_list = [C[0], C[1]] for star_name, star_coord in zip(ie, coord_list): # 直接传入已有的SkyCoord对象即可,无需重复转换 simbad_res = Simbad.query_region(star_coord, radius="0d0m0.02s") # 此处添加你筛选行星、统计数量、提取ID写入DataFrame的逻辑即可
内容的提问来源于stack exchange,提问作者Ericfa1510
相关产品推荐
相关产品推荐

