为什么我的 exit() 命令在 python 中不起作用?
Why does my exit() command not work in python?
下面是我根据输入计算卡路里的代码,在打印语句之后我想退出代码并无限循环直到用户输入正确的值。
import sys
def main():
while True:
try:
print("Please enter Age,Weight,Heart Rate and Workout Time ")
Age,Weight,HR,Time = map(eval,input().split(' '))
men = ( (Age * 0.2017) - (Weight * 0.09036) + (HR * 0.6309) - 55.0969 ) * Time / 4.184
women = ( (Age * 0.074) - (Weight * 0.05741) + (HR * 0.4472) - 20.4022 ) * Time / 4.184
print("Men:",men," Calories \nWomen:",women,"Calories \n")
exit()
except:
print("Please enter numbers only \n \n")
if __name__ == '__main__':
main()
即使输入值正确,代码也转到 except 并且不退出代码,我错过了什么?
exit()
(某些形式;它实际上不应该在脚本中使用,所以它可以被重写以做奇怪的事情;你想要 sys.exit()
)是通过提高 SystemExit
异常(退出而不冒泡将意味着 finally
和 with
语句中的清理块不执行,这很糟糕,因此他们使用异常机制进行清理)。 SystemExit
有两个特殊之处:
- 如果未处理,它不会转储回溯并以固定状态 1 退出(它只是以提供的状态代码静默退出程序)
- 不是
Exception
的child,所以except Exception:
,范围很广,还是抓不住
但是你使用了一个简单的 except,它捕获了 所有东西,包括 SystemExit
。
在这种特定情况下,正确的解决方案实际上是将 exit()
替换为 break
,这将使您跳出 while
循环并允许程序 运行 完全不需要异常就完成了。并在使用时使用更窄的 except
子句。
下面是我根据输入计算卡路里的代码,在打印语句之后我想退出代码并无限循环直到用户输入正确的值。
import sys
def main():
while True:
try:
print("Please enter Age,Weight,Heart Rate and Workout Time ")
Age,Weight,HR,Time = map(eval,input().split(' '))
men = ( (Age * 0.2017) - (Weight * 0.09036) + (HR * 0.6309) - 55.0969 ) * Time / 4.184
women = ( (Age * 0.074) - (Weight * 0.05741) + (HR * 0.4472) - 20.4022 ) * Time / 4.184
print("Men:",men," Calories \nWomen:",women,"Calories \n")
exit()
except:
print("Please enter numbers only \n \n")
if __name__ == '__main__':
main()
即使输入值正确,代码也转到 except 并且不退出代码,我错过了什么?
exit()
(某些形式;它实际上不应该在脚本中使用,所以它可以被重写以做奇怪的事情;你想要 sys.exit()
)是通过提高 SystemExit
异常(退出而不冒泡将意味着 finally
和 with
语句中的清理块不执行,这很糟糕,因此他们使用异常机制进行清理)。 SystemExit
有两个特殊之处:
- 如果未处理,它不会转储回溯并以固定状态 1 退出(它只是以提供的状态代码静默退出程序)
- 不是
Exception
的child,所以except Exception:
,范围很广,还是抓不住
但是你使用了一个简单的 except,它捕获了 所有东西,包括 SystemExit
。
在这种特定情况下,正确的解决方案实际上是将 exit()
替换为 break
,这将使您跳出 while
循环并允许程序 运行 完全不需要异常就完成了。并在使用时使用更窄的 except
子句。