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)

当您输入 intstr(如 "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() 并相应地转换您的输入。