我以为我清楚地理解了异常处理,而循环和条件语句。但是我遇到了这个简单的问题,即我的代码执行永远不会到达except语句。
我使代码尽可能简单,以指出问题。因此代码需要按'1'。只有这样它才能逃脱while循环。还有其他事情应该去例外。字符,例如'a'和'b'确实存在 - 因为它们无法转换为整数。但是任何其他数字都不会触发异常。它只是回到输入步骤。为什么会那样?显然,除1之外的任何其他数字不等于1。
while True:
click = input('Press 1')
try:
if int(click) == 1:
print('correct')
break
except:
print('wrong')
您混淆了两件事:引发异常,并处理引发的异常。
你想要做的是:
while True:
click = input('Press 1')
if int(click) == 1:
print('correct')
break
else:
raise ValueError('Wrong')
然后,您可以使用try / except语句处理引发的异常,如下所示:
while True:
click = input('Press 1')
try:
if int(click) == 1:
print('correct')
break
else:
raise ValueError('Wrong')
except ValueError:
print('Something went wrong with user input, but this except block will handle it')
只有在抛出异常时才会到达except
。你可以强制你的代码在ValueError
时抛出int(click) != 1
。以下应该为你做的伎俩。
while True:
click = input('Press 1')
try:
if int(click) == 1:
print('correct')
break
else:
raise ValueError('wrong')
except:
raise ValueError('User input is not valid')
只有在出现错误时,代码才会转到异常。如果输入非数字字符,将会出现这种情况。但是如果输入除1之外的任何数字,则没有错误,因此控件不会移动到异常。如果使用raise
关键字输入1以外的数字,您可以创建错误。
try:
if(int(input())==1:
print('entered 1')
elif(int(input())!=1):
raise ValueError(' enter 1 only')
except:
print('error')
你不需要在这里处理异常;你不关心click
的整数值。
while True:
click = input('Press 1')
if click == "1":
print('correct')
break
print('wrong')
如果你关心整数值,你只想捕捉ValueError
可能引发的int
。
while True:
click = input('Press 1')
try:
click = int(click)
except ValueError:
print('Not an integer, try again')
continue
if click == 1:
print('correct')
break
print('wrong')