Python 中的 try、except 和 while 循环

新手上路,请多包涵

我正在尝试为学校做这个练习,但代码不起作用,准确地说它在计算 BMI 后不执行 if 语句。此外,如果输入不正确,现在会检查 except 语句。请告知要在代码中更正的内容。谢谢!

 user_input_1 = input('What is your weight')
user_input_2 = input('What is your height')
b = 'BMI'
b = int(user_input_1)/(float(user_input_2)**2)
while True:
  try:
     user_input_1 == int and user_input_1 > 0
     user_input_2 == float and user_input_2 > 0
     print(b)
     if b in range(1, 19):
        print('You are skinny as a rail')
        break
     if b in range(19, 26):
        print('You are fit as a butcher\'s dog')
        break
     if b >= 25:
        print('You are as plum as a partridge')
        break
     break
  except ZeroDivisionError:
     input('Enter your height in meters as a float')
  except user_input_1 != int:
     input('Please enter your weight in kg')

原文由 Nat 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 785
1 个回答

从哪儿开始?

  1. 唯一的划分发生在进入 try 块之前,所以你的 except ZeroDivisionError 永远不会被触发。
  2. except user_input_1 != int 评估为 except True 这是无意义的,永远不会被触发
  3. 你不会在你的 while 循环中击中 break 的唯一方法是,如果你抛出一个被捕获的异常(如果它没有被捕获,它会逃脱你的 while 循环并退出程序)。由于获取用户输入的代码在 while 循环 _之外_,因此(如果可以捕获异常)没有区别,您会看到错误消息永远重复。

您对 python 的理解似乎存在一些根本性的差距。我建议先填充那些;尝试只实现一个所需的功能(例如,获取用户输入并在无效时显示适当的错误消息)并从那里构建。

原文由 SpoonMeiser 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题