为什么在“ While True”循环中使用continue时为什么会有回溯错误

时间:2019-04-07 18:51:35

标签: python python-3.x

我正在创建一个简单的程序,将公制单位转换为英制单位(不包含在内,因为它可以正常工作),但是我不知道为什么“继续”在应该重新启动循环时会产生回溯错误? / p>

import sys
import time

def converter():
    while True:
        cont_1 = input('Do you want to do another calculation? (Yes, No) ')                       
        if cont_1 == 'no' or 'No':
            break
        elif cont_1 == 'yes' or 'Yes':
            continue
    return
converter()

sys.exit()

我希望当我输入“是”或“是”时程序重新启动。实际上,我会得到一个追溯错误。

3 个答案:

答案 0 :(得分:1)

您不了解Python if语句的工作方式,现在它始终为false。

可以这样写:

if cont_1 == 'no' or cont_1 == 'No':

或者在这种情况下可能更容易:

if cont_1.lower() == 'no':

答案 1 :(得分:1)

实际上,您使用的是逻辑上完全错误的方式来运行此代码 因此您的代码应如下所示:

import sys
def converter():
    cont_1 = input('Do you want to do another calculation? (Yes/ No) ')                
    if cont_1 == 'no' or cont_1 == 'No':
        sys.exit()
    if cont_1 == 'yes' or cont_1 == 'Yes':
        pass
while True:
    converter()

答案 2 :(得分:0)

您的Traceback是由sys.exit()创建的,但是在某些IDE中运行时可能是正常的。

但是您不需要sys.exit()。如果删除它,那么您将没有Traceback


但是还有其他问题-您的if无法正常工作,退出while循环,然后执行sys.exit()

   if cont_1 == 'no' or 'No':

表示

  if (cont_1 == 'no') or 'No':    

并且此设置将产生True,并退出while循环。

您需要

  if cont_1 == 'no' or cont_1 == 'No':    

  if cont_1 in ('no', 'No'):    

或使用string.lower()

  if cont_1.lower() == 'no':

最新版本也可以与NOnO

一起使用

您可以使用

  elif cont_1 == 'yes' or 'Yes':
     continue

存在相同的问题,但是continue之后没有while中的代码,因此您不需要它

所以您只需要

def converter():
    while True:
        cont_1 = input('Do you want to do another calculation? (Yes, No) ')                       
        if cont_1.lower() == 'no':
            break
    return

converter()

或将return放在break的位置

def converter():
    while True:
        cont_1 = input('Do you want to do another calculation? (Yes, No) ')                       
        if cont_1.lower() == 'no':
            return

converter()