簡體   English   中英

如何修復我的代碼中的“UnboundLocalError:分配前引用的局部變量“dc”?

[英]How do I fix 'UnboundLocalError: local variable 'dc' referenced before assignment' in my code?

在調用 dc 之前,我無法找到引用它的確切位置。 任何幫助,將不勝感激。 代碼取自https://cfs.nrcan.gc.ca/pubwarehouse/pdfs/36461.pdf 的第 14 頁,但手冊中的代碼有一些縮進錯誤。 相關代碼(據我所知):

    def DCcalc(self,dc0,mth):
        fl = [-1.6, -1.6, -1.6, 0.9, 3.8, 5.8, 6.4, 5.0, 2.4, 0.4, -1.6, -1.6]
        t = self.t
        if(t < -2.8):
            t = -2.8
        pe = (0.36*(t+2.8) + fl[mth-1] )/2
        if pe <= 0.0:
            pe = 0.0
        if (self.p > 2.8):
            ra = self.p
            rw = 0.83*ra - 1.27 #*Eq. 18*#
            smi = 800.0 * math.exp(-dc0/400.0) #*Eq. 19*#
            dr = dc0 - 400.0*math.log( 1.0+((3.937*rw)/smi) ) #*Eqs. 20 and 21*#
            if (dr > 0.0):
                dc = dr + pe
        elif self.p <= 2.8:
            dc = dc0 + pe
        return dc

而我的錯誤:

UnboundLocalError                         Traceback (most recent call last)
<ipython-input-3-c2d03971ed28> in <module>
    140         infile.close()
    141         outfile.close()
--> 142 main()

<ipython-input-3-c2d03971ed28> in main()
    129             ffmc = round(fwisystem.FFMCcalc(ffmc0),2)
    130             dmc = round(fwisystem.DMCcalc(dmc0,mth),2)
--> 131             dc = round(fwisystem.DCcalc(dc0,mth),2)
    132             isi = round(fwisystem.ISIcalc(ffmc),2)
    133             bui = round(fwisystem.BUIcalc(dmc,dc),2)

<ipython-input-3-c2d03971ed28> in DCcalc(self, dc0, mth)
     87         elif self.p <= 2.8:
     88             dc = dc0 + pe
---> 89         return dc
     90     def ISIcalc(self,ffmc):
     91         mo = 147.2*(101.0-ffmc) / (59.5+ffmc)

UnboundLocalError: local variable 'dc' referenced before assignment

最后的 main() 函數:

def main():
    ffmc0 = 85.0
    dmc0 = 6.0
    dc0 = 15.0
    infile = open('c:Documents/data.txt','r')
    outfile = open('fwioutput.txt','w')
    try:
        for line in infile:
            mth,day,temp,rhum,wind,prcp,year=[float(field) for field in 
                                         line.strip().lstrip('[').rstrip(']').split()]
            if rhum>100.0:
                rhum = 100.0
            mth = int(mth)
            fwisystem = FWICLASS(temp,rhum,wind,prcp)
            ffmc = round(fwisystem.FFMCcalc(ffmc0),2)
            dmc = round(fwisystem.DMCcalc(dmc0,mth),2)
            dc = round(fwisystem.DCcalc(dc0,mth),2)
            isi = round(fwisystem.ISIcalc(ffmc),2)
            bui = round(fwisystem.BUIcalc(dmc,dc),2)
            fwi = round(fwisystem.FWIcalc(isi,bui),2)
            ffmc0 = ffmc
            dmc0 = dmc
            dc0 = dc
            outfile.write("%s %s %s %s %s %s\n"%(str(ffmc),str(dmc),str(dc),str(isi),str(bui),str(fwi)))
    finally:
        infile.close()
        outfile.close()
main()

考慮 self.p > 2.8 和 dr <= 0.0 這使得 dc 從未被分配過任何東西,並使該方法返回甚至不存在的 dc 。

考慮 self.p < 2.8。 然后在返回之前永遠不會定義 dc。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM