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

问题描述 投票:-2回答:2

我正在研究这个将Julian日转换为格里高利日的函数,输出看起来像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)

先感谢您。

python variables pycharm
2个回答
0
投票

你在mes中使用变量if...else,然后打印它的值。即使存在变量mes,你在if...else块中分配它的值,自然这将在if块内创建变量,因此当你尝试打印mes时它会给出错误:

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

例如:

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

变量A也是如此。

它会工作!


0
投票

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

month = 0

A = 0
© www.soinside.com 2019 - 2024. All rights reserved.