【问题标题】:Python try/except [closed]Python尝试/除[关闭]
【发布时间】:2016-04-27 16:17:43
【问题描述】:

我正在尝试 Automate the Boring Stuff 一书中的一个小程序。

我想确保输入非 int 变量的人不会使程序崩溃。代码踢出一个错误,指出“break”命令不在循环中。任何帮助,将不胜感激。

import random
print ('Hello. What is your name?')
name = input()
secretNumber=random.randint(1,20)
print('Well ' + name + ', I\'m thinking of a number between 1 and 20.')

for guessesTaken in range(1,7):
    print()
    print ('Take a guess')
try:
    guess = int(input())

except ValueError:
    print ('I said guess a number not letters or words.')

    if guess < secretNumber:
        print('Your guess is too low.')
    elif guess > secretNumber:
        print('Your guess is too high.')
    else:
        break

if guess == secretNumber:
    print('Good job! You guessed it.')
else:
    print('Nope the number I was thinking of was ' + str(secretNumber)+' sorry.')

【问题讨论】:

  • 在这里发布您的代码!
  • 更具体地说,在此处发布您的代码的minimal reproducible example
  • 没有看到你的代码,我怀疑“else”命令不在循环中。
  • 在评论中这样的格式不好。编辑您的帖子以包含代码 - 请参阅上面 cmets 中 jonrsharpe 的链接。
  • @FirstTogo 看看其他一些实际上已经回答的问题。您应该注意到关于 OP 的预期的一两件事。

标签: python try-catch except


【解决方案1】:

您的缩进不正确。请注意,try 块及其下方的所有内容都不再在您的 for 循环中。

【讨论】:

    【解决方案2】:

    嗯,首先,记住总是在这里发布你的代码,这样你就可以避免被否决。

    看着你的代码,我可以很容易地告诉你一些事情:

    1) 缩进这段代码,因为它实际上是在for 循环之外。

    try:
        guess = int(input())
    
    except (ValueError, NameError):
        print ('I said guess a number not letters or words.')
        break
    
    if guess < secretNumber:
        print('Your guess is too low.')
    elif guess > secretNumber:
        print('Your guess is too high.')
    else:
        break
    

    2) 你应该在except 块中中断(就像我在上面所做的那样),这样它就不会执行if 语句的下一个块,否则你也会得到NameError 的异常,因为因为guess 变量未创建下一个if 语句if guess "&lt;" secretNumber: 将引发异常。

    3) 这段代码有点损坏,因为如果它抛出异常并且没有创建猜测,那么 for 循环中的最后一个 if 语句也会抛出异常,所以我建议你初始化那个变量在 for 这样的声明之前:guess = 0

    您的最终代码应如下所示:

    import random
    print ('Hello. What is your name?')
    name = input()
    secretNumber=random.randint(1,20)
    print('Well ' + name + ', I\'m thinking of a number between 1 and 20.')
    guess = 0
    
    for guessesTaken in range(1,7):
        print()
        print ('Take a guess')
        try:
            guess = int(input())
    
        except (ValueError, NameError):
            print ('I said guess a number not letters or words.')
            break
    
        if guess < secretNumber:
            print('Your guess is too low.')
        elif guess > secretNumber:
            print('Your guess is too high.')
        else:
            break
    
    if guess == secretNumber:
        print('Good job! You guessed it.')
    elif guess == 0:
        None
    else:
        print('Nope the number I was thinking of was ' + str(secretNumber)+' sorry.')
    

    仍有改进的余地,但这将满足您的要求。

    祝你有美好的一天 =)。

    【讨论】:

      猜你喜欢
      • 2021-11-03
      • 1970-01-01
      • 1970-01-01
      • 2022-11-16
      • 2020-12-30
      • 2013-04-25
      • 1970-01-01
      • 2021-11-02
      • 1970-01-01
      相关资源
      最近更新 更多