【问题标题】:print doesn't work while in while loop with try/except (Windows!!!)在使用 try/except 的 while 循环中打印不起作用(Windows !!!)
【发布时间】:2021-02-06 19:39:39
【问题描述】:

不确定这里出了什么问题,函数没有打印任何内容(尝试将“1”作为参数 i)。我看到了一个建议添加 flush=True 来打印的答案,但这并不能解决问题。任何提示表示赞赏!更广泛地说 - 如果我希望函数由键盘控制,我什至应该使用 try/except 框架,还是有更好的方法?

def i_printer(i):
    while True:
        try:
            if keyboard.is_pressed('q'):
                break
        except:
            print(i)
            time.sleep(3)

编辑:使用 Windows,显然键盘无法使用它,正在寻找不同的解决方案。

【问题讨论】:

    标签: python windows printing keyboard try-except


    【解决方案1】:

    Try 和 except 块用于处理异常。由于单击“q”时不会遇到任何错误,因此我认为它们的使用在这里没有任何好处。只需简单的 if 语句就可以完成这项工作。

    def i_printer(i):
        while True:
            if keyboard.is_pressed('q'):
                break
            print(i)
            time.sleep(3)
    

    编辑:如果你想记录键盘按下,试试这个。以下代码将记录除 'q' 之外的所有键并打印记录的键。

    import keyboard
    
    def i_printer():
        rk = keyboard.record(until ='q') 
        return keyboard.play(rk, speed_factor = 1) 
    
    i_printer()
    

    【讨论】:

    • 这个问题是,当我按 q 时我没有得到任何反应,它只是循环播放。
    • 然后检查输入字符是否是'q'而不是做keyboard.is_pressed('q')
    • 抱歉,我正在阅读有关键盘的文档,但很难找到您想要的那个,您能否指出正确的方向?
    • @AndrzejK,我编辑了答案,检查这是否是你要找的。​​span>
    • 当我按下 q 后,该函数停止执行,但不会打印出我按下的所有其他键,因为它应该。可能是我使用的是 Windows 而不是 Linux?这里有提到:stackoverflow.com/questions/24072790/detect-key-press-in-python("keyboard显然需要root in linux:/")
    【解决方案2】:

    使用生成器函数和迭代器(使用 windows,而不是 linux)以这种方式滚动:

    import keyboard
    import time
    
    def printer():
        while True:
            yield '1'
            time.sleep(1)
    
    def iterator():
        for i in aaa():
            if keyboard.is_pressed('q'):
                break
            else:
                print(i)
    
    iterator()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      • 2014-12-25
      • 2015-11-22
      • 1970-01-01
      • 2016-04-06
      相关资源
      最近更新 更多