如何在python中侦听变量更改

时间:2020-10-11 13:25:34

标签: python python-3.x algorithm

我对使用python实现逻辑有疑问。在printer()中,当abort的值在第10行中更改时,main()是否有办法知道它并立即中断while循环?

编辑:当且仅当出现问题时,abort变为True

import time

abort = False

def printer():
    global abort
    print("I'm the printer")
    time.sleep(5)
    if somethingiswrong():
        print("I'm aborting here")
        abort = True
    time.sleep(2)
    print("I have aborted")

def main():
    global abort
    while not abort:
        print("In while loop")
        time.sleep(2)
        printer()
        if abort:
            break
        print("Printer killed me")
    print("Quitting")

if __name__ == "__main__":
    main()

我的意思是,日志输出现在是:

> In while loop
> I'm the printer
> I'm aborting here
> I have aborted
> Quitting

是否有更优化的方法来实现以下输出:

> In while loop
> I'm the printer
> I'm aborting here
> Quitting

我不是专家,也不熟悉任何python快捷方式,hacks,技巧等。任何帮助都会很棒.. !!

2 个答案:

答案 0 :(得分:1)

要停止某个功能(printer)在某个时刻运行,您可以在其中returnraise出现异常:

def printer():
    global abort
    print("I'm the printer")
    time.sleep(5)
    print("I'm aborting here")
    abort = True
    if abort:
      return
    ...

答案 1 :(得分:1)

如果您想使用异常来控制流程,则可以:

import time

def printer():
    global abort
    print("I'm the printer")
    time.sleep(5)
    if somethingiswrong():
        print("I'm aborting here")
        raise RuntimeError("I'm aborting here")
    time.sleep(2)
    print("I have aborted")

def main():
    while True:
        print("In while loop")
        time.sleep(2)
        try:
            printer()
        except RuntimeError:
            break
        print("Printer killed me")
    print("Quitting")

if __name__ == "__main__":
    main()

根据需要输出