Nameerror: name 'h' is not defined
Nameerror: name 'h' is not defined
所以我试图在 python 中编写一个小脚本来区分输入,当给出适当的输入时,int
将给出相关的答案。我知道有很多关于这个主题的帖子很相似,但我找不到答案。这是我所拥有的。
oktas = input("Oktas: ")
def sky_condition(oktas):
if isinstance(oktas, int) == True:
if oktas == 0:
print ("CLR")
elif oktas == 1 or oktas == 2:
print ("FEW")
elif oktas == 3 or oktas == 4:
print ("SCT")
elif oktas >= 5 and oktas <= 7:
print ("BKN")
elif oktas == 8:
print ("OVC")
elif oktas < 0 or oktas > 8:
raise ValueError("Oktas provided are above or below the allowed limits.")
elif isinstance(oktas, int) == False:
raise NameError("You suck at following instructions.")
skycondition(oktas)
当您输入 int
或 str
(如 "quotation marks" 中的某些内容)时,它会按应有的方式处理所有内容。但是,如果我只输入不带引号的字母或单词,例如 h,则会引发错误
NameError: name 'h' is not defined
它产生了我想要的错误,但不是我想要的。我如何对其进行编码,以便它按照我想要的方式引发错误?
你的代码有几处错误,我会尽力指出它们,修复它们并向你解释你做错了什么。
oktas = input("Oktas: ") #returns str only if you are running Python 3.x+.
#returns int if it's an int for Python 2.x
#not sure which version of python you are running.
def sky_condition(oktas):
if isinstance(oktas, int) == True:
if oktas == 0:
print ("CLR")
elif oktas == 1 or oktas == 2:
print ("FEW")
elif oktas == 3 or oktas == 4:
print ("SCT")
elif oktas >= 5 and oktas <= 7:
print ("BKN")
elif oktas == 8:
print ("OVC")
elif oktas < 0 or oktas > 8:
raise ValueError("Oktas provided are above or below the allowed limits.")
elif isinstance(oktas, int) == False:
raise NameError("You suck at following instructions.")
sky_condition(oktas) # you had skycondition(oktas) which wasn't your function name.
总的来说这个程序是有效的,只是你这边的拼写错误。如果你是 运行ning Python 3,你将不得不对输入 oktas
做一些错误检查,因为就像我说的,Python 3.x return 是 input()
的 str。您将需要使用 int(oktas)
转换输入,但这基本上会破坏 isinstance()
检查的目的,因为它将是一个整数。解决此问题的一个好方法是:
if oktas.isdigit():
oktas = int(oktas)
#rest of your code
如果 str 仅包含数字 0-9,isdigit()
函数 return 为真,那么您可以将 oktas
转换为 int。
如评论所说,如果您使用 Python 2.x,则应避免使用 input()
并使用 raw_input()
。几个原因:
raw_input()
基本上它会 return 一个 str
对象,不管你给什么。如果你给它 5
它会给你一个 str 对象:"5"
如果你给它 "5"
它会给你一个 str 对象:"5"
input()
这就是你的问题所在。在Python 2.x 输入基本上是在做eval(input())
。您可以在此处阅读 eval。基本上它会尝试评估给定的表达式。由于数字和字符串本身就是表达式,它会尝试 运行 您的 h
输入字面意思 h
而不是 str。在 Python 2.x.
中再次使用 raw_input()
来避免这种情况
我假设您使用的是 Python 2.x 或者您有其他未显示的代码。使用 raw_input()
并相应地转换您的输入。
所以我试图在 python 中编写一个小脚本来区分输入,当给出适当的输入时,int
将给出相关的答案。我知道有很多关于这个主题的帖子很相似,但我找不到答案。这是我所拥有的。
oktas = input("Oktas: ")
def sky_condition(oktas):
if isinstance(oktas, int) == True:
if oktas == 0:
print ("CLR")
elif oktas == 1 or oktas == 2:
print ("FEW")
elif oktas == 3 or oktas == 4:
print ("SCT")
elif oktas >= 5 and oktas <= 7:
print ("BKN")
elif oktas == 8:
print ("OVC")
elif oktas < 0 or oktas > 8:
raise ValueError("Oktas provided are above or below the allowed limits.")
elif isinstance(oktas, int) == False:
raise NameError("You suck at following instructions.")
skycondition(oktas)
当您输入 int
或 str
(如 "quotation marks" 中的某些内容)时,它会按应有的方式处理所有内容。但是,如果我只输入不带引号的字母或单词,例如 h,则会引发错误
NameError: name 'h' is not defined
它产生了我想要的错误,但不是我想要的。我如何对其进行编码,以便它按照我想要的方式引发错误?
你的代码有几处错误,我会尽力指出它们,修复它们并向你解释你做错了什么。
oktas = input("Oktas: ") #returns str only if you are running Python 3.x+.
#returns int if it's an int for Python 2.x
#not sure which version of python you are running.
def sky_condition(oktas):
if isinstance(oktas, int) == True:
if oktas == 0:
print ("CLR")
elif oktas == 1 or oktas == 2:
print ("FEW")
elif oktas == 3 or oktas == 4:
print ("SCT")
elif oktas >= 5 and oktas <= 7:
print ("BKN")
elif oktas == 8:
print ("OVC")
elif oktas < 0 or oktas > 8:
raise ValueError("Oktas provided are above or below the allowed limits.")
elif isinstance(oktas, int) == False:
raise NameError("You suck at following instructions.")
sky_condition(oktas) # you had skycondition(oktas) which wasn't your function name.
总的来说这个程序是有效的,只是你这边的拼写错误。如果你是 运行ning Python 3,你将不得不对输入 oktas
做一些错误检查,因为就像我说的,Python 3.x return 是 input()
的 str。您将需要使用 int(oktas)
转换输入,但这基本上会破坏 isinstance()
检查的目的,因为它将是一个整数。解决此问题的一个好方法是:
if oktas.isdigit():
oktas = int(oktas)
#rest of your code
如果 str 仅包含数字 0-9,isdigit()
函数 return 为真,那么您可以将 oktas
转换为 int。
如评论所说,如果您使用 Python 2.x,则应避免使用 input()
并使用 raw_input()
。几个原因:
raw_input()
基本上它会 return 一个 str
对象,不管你给什么。如果你给它 5
它会给你一个 str 对象:"5"
如果你给它 "5"
它会给你一个 str 对象:"5"
input()
这就是你的问题所在。在Python 2.x 输入基本上是在做eval(input())
。您可以在此处阅读 eval。基本上它会尝试评估给定的表达式。由于数字和字符串本身就是表达式,它会尝试 运行 您的 h
输入字面意思 h
而不是 str。在 Python 2.x.
raw_input()
来避免这种情况
我假设您使用的是 Python 2.x 或者您有其他未显示的代码。使用 raw_input()
并相应地转换您的输入。