所以我试图在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
(如“引号”中的内容)时,它会处理所有内容。但是,如果我只是放一个没有引号的字母或单词,例如h,则会引发错误
NameError: name 'h' is not defined
它会产生我想要的错误,但不会产生我想要的错误。我怎么能编码它所以它会引起我想要的错误?
答案 0 :(得分:3)
您的代码有些问题,我会尝试指出它们,修复它们并向您解释您做错了什么。
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.
整体而言,这个程序是有效的,只是你的错字。如果您正在运行Python 3,则必须对输入oktas
进行一些错误检查,因为就像我说的那样,Python 3.x为input()
返回一个str。您将需要使用int(oktas)
转换输入,但这基本上会破坏isinstance()
检查的目的,因为它将是一个int。解决这个问题的一个好方法是:
if oktas.isdigit():
oktas = int(oktas)
#rest of your code
如果str仅包含数字0-9,则isdigit()
函数返回true,然后您可以将oktas
强制转换为int。
如评论所述,如果您使用的是Python 2.x,则应避免使用input()
并使用raw_input()
。原因如下:
raw_input()
基本上它会返回一个str
对象,无论你给出什么。如果你给它5
,它会给你一个str对象:"5"
如果你给它"5"
,它会给你一个str对象:"5"
input()
这就是你的问题所在。在Python 2.x中,输入基本上是eval(input())
。您可以在此处阅读eval。基本上它试图评估给定的表达式。由于数字和字符串本身就是表达式,因此它会尝试按字面h
而不是str来运行h
输入。再次使用raw_input()
在Python 2.x中避免这种情况。
我假设您使用的是Python 2.x,或者您还有其他未显示的代码。使用raw_input()
并相应地投射您的输入。