我认为我清楚地理解了异常处理,while循环和条件语句。但是我遇到了一个简单的问题,我的代码执行从未达到except语句。
我使代码尽可能简单,以指出问题所在。 因此,代码需要按“ 1”。只有这样,它才能逃脱while循环。其他任何事情都应该例外。诸如“ a”和“ b”之类的字符可以-因为它们不能转换为整数。但是任何其他数字都不会触发异常。它只是回到输入步骤。为什么会这样呢?显然,除1以外的任何其他数字都不等于1。
while True:
click = input('Press 1')
try:
if int(click) == 1:
print('correct')
break
except:
print('wrong')
答案 0 :(得分:0)
仅当出现错误时,代码才会进入异常状态。如果您输入非数字字符,则会发生这种情况。但是,如果输入的数字不是1,则没有错误,因此控制不会移至异常。如果有人使用raise
关键字输入1以外的数字,则可能会产生错误。
try:
if(int(input())==1:
print('entered 1')
elif(int(input())!=1):
raise ValueError(' enter 1 only')
except:
print('error')
答案 1 :(得分:0)
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')
答案 2 :(得分:0)
您在混淆两件事:引发一个异常和处理一个引发的异常。
您要在这里做的是:
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')
答案 3 :(得分:0)
这里不需要异常处理;您不必担心click
的整数值。
while True:
click = input('Press 1')
if click == "1":
print('correct')
break
print('wrong')
如果您 did 关心整数值,则只想捕获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')