1

我正在对数千张图像执行光圈测光,并在我的模块中有这段代码。

b_aperture = SkyCircularAperture(b_position, r= r*u.arcsec)
b_annulus_aperture = SkyCircularAnnulus(b_position, r_in= r_in*  u.arcsec, r_out= r_out* u.arcsec) 
b_ap_pix = b_aperture.to_pixel(w_n)
b_ap_pix_mask= b_ap_pix.to_mask(method='exact')[0]
c_img_data = b_ap_pix_mask.apply(masked_img_aper)

这在大多数图像上都可以正常工作,但在某些图像中会触发以下错误;

> <ipython-input-41-d3d69b9fd615> in <module>()
 51         b_ap_pix = b_aperture.to_pixel(w_n)
 52         b_ap_pix_mask= b_ap_pix.to_mask(method='exact')[0]   
 53         c_img_data = b_ap_pix_mask.apply(masked_img_aper)
 55         b_phot_table = aperture_photometry(masked_img_aper, b_aperture, method ='exact', wcs =w_n )
 /Users/aprakash/Library/Enthought/Canopy/edm/envs/User/lib/python3.5/site-packages/photutils/aperture/core.py in apply(self, data, fill_value)
719         """ 
721         return self.cutout(data, fill_value=fill_value) * self.data
722 
TypeError: unsupported operand type(s) for *: 'NoneType' and 'float'}

此错误通常发生在未定义变量但我已检查此处的变量“masked_img_aper”已定义并且看起来像正常图像时。蒙版“b_ap_pix_mask”看起来也像以前图像上的其他蒙版一样正常。所以,我不确定发生了什么以及如何解决这个问题。我的代码在数以千计的图像上循环运行,而这只发生在分解代码的少数图像上。我想规避这个问题(可能通过使用“if”语句)或修复它。

我试过跟随但没有用;

if (isinstance(np.array(b_ap_pix_mask.apply(masked_img_aper)), NoneType) == False;

任何想法,将不胜感激。最好的,阿比

4

2 回答 2

0

看起来这是在正在开发的当前版本中修复的错误:https ://github.com/astropy/photutils/pull/646

于 2018-04-28T16:28:52.560 回答
-1

好的,我找到了一种使用以下方法来规避此问题的方法;

try:
    c_img_data = b_ap_pix_mask.multiply(masked_img_aper)
except:
    print('Error calling b_ap_pix_mask.multiply(), ignoring')
    pass

这只会跳过循环中的图像。因为,我正在处理成千上万的图像,所以省略一些不会有太大的不同。

于 2018-04-28T23:53:53.520 回答