【问题标题】:Python script does not exit after function run函数运行后 Python 脚本不退出
【发布时间】:2017-11-09 20:28:44
【问题描述】:

我有一个以下程序,它只是读取使用键盘按下的按钮,如果用户点击 Escape 按钮,脚本应该停止工作。问题是它没有这样做 - 它停止打印按钮但没有结束其操作。我尝试添加sys.exit() 函数但没有成功。

任何建议将不胜感激!

from __future__ import print_function

from inputs import get_key
from inputs import DeviceManager

def main():
    devices = DeviceManager()
    dictionaries = devices.codes
    qt = False
    while qt == False:
        events = get_key()
        for event in events:
            if (event.code in dictionaries["Key"].values() and event.code != "KEY_ESC" and event.state == 1):
                print(event.code, event.state)
            elif (event.code in dictionaries["Key"].values() and event.code == "KEY_ESC" and event.state == 1):
                qt = True
                break
    return

if __name__ == "__main__":
    main()

【问题讨论】:

  • 请提供一个完整的、可验证的示例来说明您遇到的问题。 stackoverflow.com/help/mcve
  • 我正在打破 for 循环,在 qt 设置为 True 后我退出 while 循环
  • @JacobKrall 不是可验证且完整的吗?你可以简单地运行这个脚本。
  • 琐碎,但你可以写while not qt:
  • 如果我摆脱所有inputs 特定的东西,改用input(),它工作正常。所以我认为inputs 库可能会阻止您的程序退出。我无法让 inputs 在我的 VM 上为您做任何测试。

标签: python python-3.x


【解决方案1】:

正如 cmets 中所建议的,这是与包相关的问题。在这种情况下,问题的正确解决方案是使用try 语句:

from __future__ import print_function

from inputs import get_key
from inputs import DeviceManager

def main():
    devices = DeviceManager()
    dictionaries = devices.codes
    qt = False
    try:
        while True:
            events = get_key()
            for event in events:
                if (event.code in dictionaries["Key"].values() and event.state == 1):
                    print(event.code, event.state)
    except KeyboardInterrupt:
        return

if __name__ == "__main__":
    main()

【讨论】:

    【解决方案2】:

    代码中有两个循环,while 和 for。你只打破了 for 循环。你也应该打破 while 循环。

    【讨论】:

    • 我通过将 qt 设置为 True 来中断 while 循环
    • 抱歉,发现有点晚了。 @Michał 你确定它在按 ESC 时进入 elif 条件吗?你可以打印一些东西来检查它。
    • 是的,我使用打印功能检查了它,而且似乎我要退出 main() 函数调用
    猜你喜欢
    • 2015-05-10
    • 2016-07-30
    • 2019-02-26
    • 2014-02-04
    • 2023-01-16
    • 1970-01-01
    • 1970-01-01
    • 2017-10-31
    • 2019-06-23
    相关资源
    最近更新 更多