Почему я получаю ошибку "NameError: имя 'kh' не определено" - PullRequest
0 голосов
/ 24 мая 2019

Я получаю входные данные, используя sys, есть 2 строки b и l, они перейдут в оператор if и присваивают значение kh и другим переменным, но я продолжаю получать ошибка около kh

Вход выглядит так:

# Data Input

# Latitude
lat = float(sys.argv[1])
# Longitude
lon = float(sys.argv[2])
# Frequency Band
b = str(sys.argv[3])
# Link Type
l = str(sys.argv[4])
# Elevation
hs = float(sys.argv[5])/1000

и оператор if выглядит следующим образом:

if b == 'C' and l == 'UL':
    f = 6
    kh = 0.0007056
    ah = 1.5900
    kv = 0.0004878
    av = 1.5728
    tao = 45
elif b == 'C' and l == 'DL':
    f = 4
    kh = 0.0001071
    ah = 1.6009
    kv = 0.0002461
    av = 1.2476
    tao = 45

k = (kh + kv + (kh - kv) * pow(cos(radians(lat)), 2) * cos(radians(2 * tao))) / 2
print('k = ', k)
a = (kh * ah + kv * av + (kh * ah - kv * av) * pow(cos(radians(lat)), 2) * cos (radians(2 * tao))) / (2 * k)
print('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

Почему это происходит и как я могу это решить?

1 Ответ

2 голосов
/ 24 мая 2019

Вероятно, это связано с делом, не охваченным вашими заявлениями if и elif. Если b и l не соответствуют ни одному из двух случаев, переменные никогда не определяются и не получают значения.

Вы должны добавить регистр else по умолчанию после блока elif с любыми значениями по умолчанию, которые вы хотите:

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

Однако, если вы получаете эту проблему, это означает, что вы, вероятно, получаете неожиданные данные. Вы также можете добавить некоторые операторы печати, чтобы определить значения b и l, и записать соответствующие случаи.

...