在python中赋值之前引用的局部变量“ mes”?

时间:2019-03-01 04:23:00

标签: python variables pycharm

我正在研究将该儒略日转换为公历日期的函数,其输出应类似于ex。 22.0,12.0,2000就是为什么在打印中我有这三个变量,但是当我运行它时,它给了我错误:

  

分配前已引用本地变量'mes'。

此外,“ A”似乎以黄色突出显示,并带有警告“可能在分配之前引用了局部变量A”。我不知道该如何解决。

我尝试更改缩进,但是我看不出有什么问题。

下面是我的功能:

def JD2fechaGregoriana(fecha):
   fecha1=int(fecha+0.5)
   fecha2=float(fecha1-fecha)
   Z =fecha1
   F = fecha2
   if (Z<2299161):
       A=Z
   elif (Z>= 2291161):
       alpha=int((Z-1867216.25)/36524.25)
       A= Z + 1 + alpha -int(alpha/4)

   B= A +1524
   C= int((B-122.1)/365.25)
   D= int(365.25*C)
   E= int((B-D)/30.6001)
   dia1= B-D - int(30.6001*E)+F

   if (E>14):
      mes=E-1
   elif (E==14 or E==15):
      mes=E-13
   if (mes>2):
      anio=C-4716
   elif(mes==1 or mes==2):
      anio=C-4715

   print(dia1,mes,anio)

谢谢。

2 个答案:

答案 0 :(得分:0)

您正在mes中使用变量if...else,然后打印其值。 即使变量mes存在,您仍要在if...else块中分配其值,这自然会在if块中创建变量,因此当您尝试打印mes时给出错误:

您应该首先在if语句之前将变量声明为0,然后在if块中进一步使用此变量。

例如:

.....
mes=0
if (E>14):
  mes=E-1
......

变量A也是如此。

那行得通!

答案 1 :(得分:0)

朋友,请查看变量范围的主题,在IF -ELSE中比较变量之前先声明变量。用一些值初始化它们。例如

month = 0

A = 0