【问题标题】:Is there a way to check if the try statement was successful or not? [duplicate]有没有办法检查 try 语句是否成功? [复制]
【发布时间】:2021-08-11 18:58:04
【问题描述】:

刚开始学习python,想做一个计算器。我目前有一些代码试图将用户输入的内容转换为整数,但我想要做的是能够检查尝试是否成功。

这是我遇到问题的部分。

import sys

first_number = input('Enter a number: ')

try:
  int(first_number)
except:
  print("Sorry, that's not a number.")
  exit()

【问题讨论】:

  • 您说您“遇到了麻烦”,但是您尝试过的方法有什么问题(除了使用裸except:,这几乎不是一个好主意)?
  • 如果该行有效,它将在该行之后继续。如果到达except,则在except子句之后继续。

标签: python


【解决方案1】:

您可以在int 之后设置一个仅在成功时设置的标志:

success=False
nums=iter(['abc','123'])
while not success:
    try:
        x=int(next(nums))
        success=True
    except ValueError as e:
        print(e, 'Try Again!')
        
print(x)

打印:

invalid literal for int() with base 10: 'abc' Try Again!
123

第一次'abc' 出错,第二次成功。

由于nums 第一次尝试出错,因此不会将success 设置为True。第二次不是错误,success 设置为Truewhile 循环终止。您可以对用户输入使用相同的方法。迭代器只是模拟...

所以对于你的例子:

success=False
while not success: 
    try:
        n_string = input('Enter a number: ')
        int(n_string)
        success=True
    except ValueError as e:
        print(f'"{n_string}" is not a number. Try again')

这在 Python 中通常被简化为这个常见的习惯用法,用于用户输入:

while True:
    try:
        n_string = input('Enter a number: ')
        int(n_string)
        break
    except ValueError as e:
        print(f'"{n_string}" is not a number. Try again')

【讨论】:

    【解决方案2】:

    为了让这个更有意义,让它成为一个函数:

    def getNumber():
        while True:
            number = input('Enter a number: ')
            if number.isnumeric():
                return int(number)
            print( "Not a number, please try again." )
    

    【讨论】:

      【解决方案3】:

      你可以这样做:

      try:
          int(first_number)
          print("try successful!")
      except ValueError:
          print("Sorry, that's not a number.")
          print("try unsuccessful!")
          exit()
      

      【讨论】:

      • 谢谢,我不知道我是怎么错过的。
      猜你喜欢
      • 1970-01-01
      • 2023-03-09
      • 2020-06-28
      • 2012-06-30
      • 2023-01-14
      • 2011-06-03
      • 2020-11-26
      • 2011-07-17
      • 1970-01-01
      相关资源
      最近更新 更多