1

さまざまな理由で失敗する可能性のある数値コードがあります。出力値をnumpy.NANに置き換えて、状況が変化し続けるようにしたいと思います。brentqへの呼び出しをtry:except:ステートメントでラップしようとしましたが、同じ例外でコードがクラッシュしました。

def someotherfunction(stuff):
    self.energy2ph = lambda e: self.brentq_fails_to_NAN(ph2offset_energy, 0., max_ph, args=(e,))    
def brentq_fails_to_NAN(self, *args):
    ''' this simply calls scipy.optimize.brentq with the exact same arguments, 
    but in the case of an error it returns numpy.NAN instead of throwing an exception '''
    try:
        return scipy.optimize.brentq(*args)
    except:
        print 'returning numpy.NAN instead of throwing an exception for energy2ph'
        return numpy.NAN

tryステートメントに戻る例外を除いてトレースバックを取得します。私の理解では、その場合は、except:ステートメントの下でコードを実行する必要があります

/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/mass/calibration/energy_calibration.pyc in name2ph(self, name)
    257 
    258     def brentq_fails_to_NAN(self, *args):
--> 259         try:
    260             return scipy.optimize.brentq(*args)
    261         except:

/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/mass/calibration/energy_calibration.pyc in <lambda>(e)
    252         max_ph = 1.3*self._ph[-1]
    253         ph2offset_energy = lambda ph, eoffset: self.ph2energy(ph)-eoffset
--> 254 #        self.energy2ph = lambda e: scipy.optimize.brentq(ph2offset_energy, 0., max_ph, args=(e,))
    255         self.energy2ph = lambda e: self.brentq_fails_to_NAN(ph2offset_energy, 0., max_ph, args=(e,))
    256 

/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/scipy/optimize/zeros.pyc in brentq(f, a, b, args, xtol, rtol, maxiter, full_output, disp)
    387     if type(args) != type(()) :
    388         args = (args,)
--> 389     r = _zeros._brentq(f,a,b,xtol,maxiter,args,full_output,disp)
    390     return results_c(full_output, r)
    391 

ValueError: f(a) and f(b) must have different signs
4

1 に答える 1

0

この場合、何らかの例外が飲み込まれている可能性があります。これを試してください

except Exception:
        print 'returning numpy.NAN instead of throwing an exception for energy2ph'
        return numpy.NAN
于 2013-03-12T23:10:26.407 に答える