当用户输入的选项不在我的 3 个指定选项中时,我想在这段代码中引发异常:
inventory = []
print "You can choose 2 items from the following:"
print "Gun, Grenade, Smoke bomb. Type your weapon choices now: "
try:
choice1 = raw_input("Choice 1: ")
inventory.append(choice1)
except:
if choice1 not in ('gun', 'grenade', 'smoke bomb'):
raise Exception("Please enter one of the 3 choices only only")
但是,当我运行它时,无论用户输入什么内容,用户的选择都会被接受,我不清楚为什么。
我知道我可以用其他方法来完成这项工作,例如在 raw_input 之后放置一个 while 循环来检查针对这 3 个项目输入的内容,但我想通过 try 和 except 来完成此操作。
我不确定你为什么要把检查放在异常处理程序中。修复它:
choice1 = raw_input("Choice 1: ")
if choice1 not in ('gun', 'grenade', 'smoke bomb'):
raise Exception("Please enter one of the 3 choices only only")
顺便说一句,内置的
ValueError
听起来像是一个合乎逻辑的异常选择:
raise ValueError("Please enter one of the 3 choices only only")
并注意
only only
拼写错误。
像Python这样的错误处理的优点是可以在一个级别检测到错误,但可以由另一个级别处理。 假设您有一个自定义输入函数,它尝试验证输入并在出现问题时引发多个异常之一。 在这里,我们将使用自定义异常,但正如建议的那样,使用像 ValueError 这样的内置异常也很好:
class BadChoiceError(Exception):
def __str__(self):
return "That choice not available!"
def get_choice(prompt):
choice = raw_input(prompt)
if choice not in {'gun', 'grenade', 'smoke bomb'}:
raise BadChoiceError()
return choice
inventory = []
print "You can choose 2 items from the following:"
print "Gun, Grenade, Smoke bomb. Type your weapon choices now: "
try:
choice1 = get_choice("Choice 1: ")
inventory.append(choice1)
except BadChoiceError as error:
print(str(error))
print("Please enter one of the 3 choices only.")
except:
exit("Unknown error. Try again later.")
输入函数可以选择自行处理错误,但它允许更高级别的代码决定处理错误的最佳方法 这种情况(或不是。)
为此,您可以创建自己的自定义例外 ... 使继承 Exception 类的相应类尝试使用...s
捕获异常class YourException(Exception):
def __repr__(self):
return 'invalid choice'
invent = []
try:
c = raw_input("enter your choice :")
if c not in ['dvdvdf','vfdv','fvdv']:#these are your choice
raise YourException()