Python 为什么我会得到这个错误;名称错误:名称';kh';“未定义”;

Python 为什么我会得到这个错误;名称错误:名称';kh';“未定义”;,python,string,if-statement,sys,Python,String,If Statement,Sys,我正在使用sys接收输入数据,有两个字符串b和l,它们将转到if语句,并将值分配给kh和其他变量,但我一直得到一个关于kh的错误 输入如下所示: #数据输入 #纬度 lat=浮动(sys.argv[1]) #经度 lon=浮动(sys.argv[2]) #频带 b=str(sys.argv[3]) #链接类型 l=str(sys.argv[4]) #仰角 hs=浮动(sys.argv[5])/1000 if语句如下所示: 如果b='C'和l='UL': f=6 kh=0.0007056 ah=

我正在使用sys接收输入数据,有两个字符串
b
l
,它们将转到if语句,并将值分配给
kh
和其他变量,但我一直得到一个关于
kh
的错误

输入如下所示:

#数据输入
#纬度
lat=浮动(sys.argv[1])
#经度
lon=浮动(sys.argv[2])
#频带
b=str(sys.argv[3])
#链接类型
l=str(sys.argv[4])
#仰角
hs=浮动(sys.argv[5])/1000
if语句如下所示:

如果b='C'和l='UL':
f=6
kh=0.0007056
ah=1.5900
kv=0.0004878
av=1.5728
陶=45
elif b=='C'和l=='DL':
f=4
kh=0.0001071
ah=1.6009
kv=0.0002461
av=1.2476
陶=45
k=(kh+kv+(kh-kv)*功率(cos(弧度(lat)),2)*cos(弧度(2*tao))/2
打印('k=',k)
a=(kh*ah+kv*av+(kh*ah-kv*av)*功率(cos(弧度(lat)),2)*cos(弧度(2*tao))/(2*k)
打印('a=',a)
我希望
k
a
的值是浮动的,但我得到以下错误:

Traceback (most recent call last):
  File "pluviobol.py", line 529, in <module>
    k = (kh + kv + (kh - kv) * pow(cos(radians(lat)), 2) * cos(radians(2 * tao))) / 2
NameError: name 'kh' is not defined
回溯(最近一次呼叫最后一次):
文件“pluviobol.py”,第529行,在
k=(kh+kv+(kh-kv)*功率(cos(弧度(lat)),2)*cos(弧度(2*tao))/2
NameError:未定义名称“kh”

为什么会发生这种情况?我如何解决它?

这可能是因为您的
if
elif
语句中没有涉及到一个案例。如果
b
l
与这两种情况中的任何一种都不匹配,则变量永远不会定义或给定值

您应该在
elif
块之后添加一个默认的
else
大小写,使用您想要的任何默认值:

else:
    f = 0
    kh = 0
    ah = 0
    kv = 0
    av = 0
    tao = 0

然而,如果你遇到这个问题,这意味着你可能会得到意想不到的输入。您还可以添加一些打印语句来确定
b
l
的值,并编写相应的案例。

这可能是因为
if
elif
语句中没有涵盖案例。如果
b
l
与这两种情况中的任何一种都不匹配,则变量永远不会定义或给定值

您应该在
elif
块之后添加一个默认的
else
大小写,使用您想要的任何默认值:

else:
    f = 0
    kh = 0
    ah = 0
    kv = 0
    av = 0
    tao = 0

然而,如果你遇到这个问题,这意味着你可能会得到意想不到的输入。您还可以添加一些打印语句,以确定
b
l
的值,并编写相应的案例。

最有可能的情况是,如果
语句中的任何条件都未得到满足,这意味着
kh
(以及f、ah、kv、av和tao)从未创建过,因此当您的脚本达到
k
的定义时,就没有
kh
可供使用我在运行脚本时给出了正确的参数,我的命令行如下所示:python pluviobol.py-16-65 C DL 178当我使用您发布的代码和命令行时,我得到了预期的输出,而不是你描述的错误。请提供所需的。对不起,你是对的
如果不符合
声明,我在代码中的其他地方使用了
b
。我在输入部分更改了名称,现在它可以工作了,谢谢。很可能,如果
语句中的任何条件都没有得到满足,这意味着
kh
(还有f、ah、kv、av和tao)从未创建过,因此当您的脚本达到
k
的定义时,就没有
kh
可供使用我在运行脚本时给出了正确的参数,我的命令行如下所示:python pluviobol.py-16-65 C DL 178当我使用您发布的代码和命令行时,我得到了预期的输出,而不是你描述的错误。请提供所需的。对不起,你是对的
如果不符合
声明,我在代码中的其他地方使用了
b
。我在输入部分更改了名称,现在可以使用了,谢谢。