尝试——除了挣扎

try - except struggle

如果这个人输入的数字不是 4 个数字长,我试图使用 try-except 结构停止这个程序。例如,如果我输入 2 位或 3 位数字,我真的不明白为什么它会跳过 except 块。感谢所有帮助。

guess = int(input('Guess a 4 digit number:\n'))
guesslist = [int(x) for x in (str(guess))]
x = 0
y = 0

try:
    print(len(str(guess)))
    len(str(guess)) == 4

except:
    print('please enter a 4 digit number')
    quit()

print('past')

尝试将 assert 添加到 len(str(guess)) == 4,使其成为 assert len(str(guess)) == 4

原因是 len(str(guess)) == 4 没有用 - 即 运行 但您没有告诉 Python 对结果做任何事情。如果你assert,它基本上意味着验证下一个代码是否为真,否则抛出异常。

try/except 语法捕获异常(又名错误)。如果 try 子句中的代码没有抛出错误,则跳过 except 子句。您的 try 子句中没有任何明显的错误。

来自try/except docs:

First, the try clause (the statement(s) between the try and except keywords) is executed. If no exception occurs, the except clause is skipped and execution of the try statement is finished.

改用if/then条件语法:

if len(str(guess)) == 4:
    print(len(str(guess)))
else:
    print('please enter a 4 digit number')
    quit()

您需要引发异常才能触发异常。像这样尝试:

guess = int(input('Guess a 4 digit number:\n'))
guesslist = [int(x) for x in (str(guess))]
x = 0
y = 0
try:
    print(len(str(guess)))
    if(len(str(guess)) != 4):
        raise Exception("Invalud number")

except:
    print('please enter a 4 digit number')
    quit()

print('past')