python – astropy.io.fits – HIERARCH关键字不适用于CONTINUE卡:FITS标准的Bug或“功能”?

astropy.io.fits手册指出,我们可以使用超过8个字符的标题关键字.在本例中为
HIERARCH cards will be created.该手册还指出,如果我们要存储长度超过80个字符的关键字 – 值对,则为
continue cards will automatically be created.

但是,在实践中似乎两个定义只能互斥,即我们不能创建包含关键字值对的FITS文件,其中关键字长度超过8个字符(即HIERARCH关键字)且值很长串.

一个例子:

from astropy.io import fits

header1 = fits.Header()
header2 = fits.Header()
header3 = fits.Header()

header1['TEST'] = 'superlongstring'*10
header2['TEST TEST'] = 'superlongstring'
header3['TEST TEST'] = 'superlongstring'*10

这里header1和header2是正确的,但是当调用repr(header3)或尝试使用这样的头保存FITS文件时,错误ValueError:引发关键字TEST TEST及其值太长.

这是FITS标准的“非预期功能”,即HIERARCH关键字不能继续使用CONTINUE卡,或者这可能只是astropy.io.fits的错误?

最佳答案 我在
issue opened by the OP中写过这个,但我也在这里复制它的一个版本作为一个可能的答案:

这里的问题是CONTINUE约定严格限于用字符串值扩展卡的值(即它不适用于具有不同类型值的卡).但是,从形式上讲,使用HIERARCH约定的卡根本没有任何值,因此CONTINUE约定不适用于它,除非在使用HIERARCH约定解析卡片时隐式支持CONTINUE约定.因为如何执行此操作存在歧义(例如,关键字的最大长度是多少?),并且因为HIERARCH约定没有明确允许这种解释(它为如何解释a的内容提供了一组特定的指导原则) HIERARCH卡)FITS读者应该避免对HIERARCH卡的一些无证解释添加任何隐含支持(因此引入了另一个大多数读者/作者不支持的隐含约定).

可以做的是游说ESO HIERARCH约定的作者更新他们的约定,以便与CONTINUE约定明确相互兼容,此时应该允许任何支持这两种约定的FITS阅读器.但与此同时,这个问题过于充满困难,即使看起来“显而易见”他们可以共同努力.

点赞