如果不满足条件,则在__name__时断开

时间:2014-09-22 12:31:50

标签: python loops error-handling break

我正在使用

if __name__ == "__main__":

运行我定义的函数。

但是,作为一种错误捕获措施,我试图实现一种方法来确保文件路径已正确输入到我的脚本运行的.bat文件中,文件名作为参数传入。

我正在做的是定义一个函数来定义某些参数是否“有效”,例如

.endswith("\\")

.endswith(".txt")

但是因为它们位于if块(if __name__ ==“ main ”`)内,我正在努力解决如何停止脚本的问题。

我基本上想要将验证函数应用于所有参数,如果有的话返回False然后停止__main__函数并以这种方式显示错误消息:

print len(invalid_args), " arguments are invalid, please check input"

但是,此处使用break在pycharm中显示为"Break is outside of loop"

如果验证返回False并且它全部包含在if __name__ == "__main__"块中,如何停止运行其余脚本?

以下是我的代码的表示,但没有不必要的细节:

def clean():
    do_something()

def merge():
    do_something_else()

def valid()
    if valid:
        return True
    if not valid:
        return False

if __name__ == "__main__":
    if not valid():
        "Stop script here" # This is the part I don't know how to do
    if valid():
        try:
            clear()
        except Exception a e:
            print e + "Something Went Wrong"
        try:
            merge()
        except Exception as e:
            print e + "Something Went Wrong"

3 个答案:

答案 0 :(得分:4)

break用于打破循环(正如PyCharm告诉你的那样)。

相反,您可以使用以下代码运行测试,如果为true,则不允许其余内容继续运行。

# Your code ...

def some_function():
    # Something function that runs your tests
    # If your tests fail then return True, otherwise return False

if __name__ == '__main__':
    if some_function():
        print("Sorry but your .bat file must be broken!")
    else:
        # Run the rest of your code happily.

您甚至可以raise an Exception而不是仅打印邮件。

答案 1 :(得分:3)

if “loop”。您只能breakfor {{1>}(循环)while。要在循环外停止程序,您有几个选项:

  1. raise错误;
  2. sys.exit整个计划;或
  3. 使用另一个if保护其余代码。
  4. 例如:

    if __name__ == "__main__":
        valid_args, invalid_args = process(args)
        if invalid_args:
            # raise error or exit
        # rest of code
    

    或:

    if __name__ == "__main__":
        valid_args, invalid_args = process(args)
        if invalid_args:
            # print warning
        else:
            # rest of code
    

    在函数中,您还可以return

    def main():
        valid_args, invalid_args = process(args)
        if invalid_args:
            return
        # rest of code
    
    if __name__ == "__main__":
        main()
    

答案 2 :(得分:1)

if __name__ == "__main__"下的所有逻辑移到单独的函数中,并用

替换if __name__ == "__main__"
if __name__ == "__main__":
    doMySetupStuff()

doMySetupStuff函数中,如果发现任何参数无效,可以查看参数和return