Python退出循环并再次从start开始整个过程

Python退出循环并再次从start开始整个过程,python,Python,我不熟悉Python脚本。我已经用python编写了一段代码。到目前为止,它运行得很好。我需要知道的是,如何多次运行它,如果条件失败,我想从一开始就启动整个脚本。下面是示例代码。该脚本保存在名为adhocTest.py的文件中,因此我在python shell中运行如下脚本 而1==1: execfile('adhocTest.py') 函数main()正常运行,直到从用户输入接收到txt1==2为止。现在,当txt1的输入更改为2以外的值时,它将退出脚本,因为我已经给出了sys.exit(),

我不熟悉Python脚本。我已经用python编写了一段代码。到目前为止,它运行得很好。我需要知道的是,如何多次运行它,如果条件失败,我想从一开始就启动整个脚本。下面是示例代码。该脚本保存在名为adhocTest.py的文件中,因此我在python shell中运行如下脚本

而1==1: execfile('adhocTest.py')

函数main()正常运行,直到从用户输入接收到txt1==2为止。现在,当txt1的输入更改为2以外的值时,它将退出脚本,因为我已经给出了sys.exit(),我需要知道的是,如果tx1的输入不等于2,如何在不退出的情况下再次启动脚本adhocTest.py。我试图找到答案,但不知何故,我没有得到我想要的答案

  import time
  import sys
  import os

  txt = input("please enter value \n")

  def main():
      txt1 = input("Please enter value only 2 \n")
      if txt1 == 2:
          print txt
          print txt1
          time.sleep(3)
      else:
          sys.exit()  

  if __name__ == '__main__':
      while 1 == 1:
          main()

我想这就是你想要的:

import time
import sys
import os

def main():
    while True:
        txt = input("please enter value \n")
        txt1 = input("Please enter value only 2 \n")
        if txt1 == 2:
            print txt
            print txt1
            time.sleep(3) 

if __name__ == '__main__':
    sys.exit(main())

您只需在您的
else
中重新调用
main
。您可以重新考虑以下因素:

def main():
    txt1 = input("Please enter value only 2 \n")
    if txt1 == 2:
        print txt
        print txt1
        time.sleep(3)
    main()   
或者,只需调用
main()
(而不是在
循环时将其包装在
中)并将循环移到内部。我也会显式地传递
txt
,而不是依赖于作用域:

def main(txt):
    while True:
        txt1 = input("Please enter value only 2 \n")
        if txt1 == 2:
            print txt
            print txt1
            time.sleep(3)

后者避免了递归问题。

您是否正在尝试获取用户输入?如果是这样的话-你可能想看看谢谢@InbarRose No,我不会收到任何用户输入。这是示例脚本。事实上,我从Excel工作表中获取值,因此在我按ctrl键取消循环之前,不会进行手动干预。根据您对我们建议的解决方案的评论,很明显,您没有在问题中包含所有信息。除非您通过在问题中包含有关您正试图做什么的信息来通知我们,否则您将无法获得对您有效的答案/解决方案。在收到答案后,您不能继续添加要求和附录。如果您的问题最初不够清晰,无法在第一次得到可靠的最终答案,这表明您需要改进您的问题或提出新的问题,用户将不会继续检查以确保其正确。请尝试将您的代码放在其他脚本中。当然,再加上一些逻辑,重新启动该脚本。@Barrose我将提出一个新问题。很抱歉,我无法正确解释问题。很抱歉,我编辑了我的代码,否则语句应该退出main()并从start开始启动脚本。然后,按照Inbar Rose的回答,只需将所有内容移动到
,而
main()
中的
循环中。您不需要实际重新启动脚本。您的意思是说我应该硬编码txt的值?但在我的实际代码中,txt部分与将文件从一个地方复制到另一个地方有关,main()部分在这张工作表中输入了一些值,也计算了其中的一些值。当评估返回false时,我将关闭文件并通过从startNo启动脚本来获取新文件,这不是我要说的-当示例代码与您试图实现的目标相去甚远时,很难给出提示。我的意思是,与其为
txt
设置一个有效的全局变量,不如在设置后将其显式地传递给
main()
。但是,您在其他地方所做的评论表明,您的目标与当前代码所做的有很大不同。如果条件为false,此解决方案不会为我提供输入txt值的选项。当txt1的条件为false时,脚本应该从头开始询问txt的值。这不是原始脚本编写的内容,但很容易修改。-检查编辑。是的,这是我的错误,我很抱歉我给出了main()作为else结果而不是sys.exit()事实上我不应该在这里退出我应该从start开始整个脚本。在这种情况下,我每次都必须输入txt的值。但在我的实际代码中,txt部分与将文件从一个地方复制到另一个地方有关,main()部分在这张表中输入了一些值,同时也计算了其中的一些值。当计算结果返回false时,我将关闭文件并通过启动脚本并再次重复main()函数来获取新文件。希望我在这里清楚你不清楚,在任何地方。请提出一个新问题,咨询并确保您的新问题清晰、简洁,无需后续评论和补充即可回答。