You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中调用函数时while循环无法持续运行的问题

问题描述

当Python代码的while循环内包含strong_beat.play()语句时,循环会停止运行;移除该语句后,循环可正常执行完20次循环。代码如下:

import simpleaudio, time, math 

temp = 0
strong_beat = simpleaudio.WaveObject.from_wave_file('metronome2.wav')
while temp<20:
    strong_beat.play()
    time.sleep(0.5)
    temp = temp + 1
    print (temp)
解决办法

方案1:捕获播放异常

simpleaudio的play()方法在无法正常播放音频时(比如设备资源被占用、短时间内多次调用导致播放队列溢出),可能会抛出未被捕获的异常,直接终止循环。给播放逻辑加上异常捕获,就能让循环继续执行:

import simpleaudio, time, math 

temp = 0
strong_beat = simpleaudio.WaveObject.from_wave_file('metronome2.wav')
while temp < 20:
    try:
        strong_beat.play()
    except Exception as e:
        print(f"播放错误: {e}")
    time.sleep(0.5)
    temp += 1
    print(temp)

方案2:等待播放完成后再继续循环

如果不需要同时叠加播放音频,可等待当前音频播放完成后再执行循环的下一步,避免播放冲突:

import simpleaudio, time, math 

temp = 0
strong_beat = simpleaudio.WaveObject.from_wave_file('metronome2.wav')
while temp < 20:
    play_obj = strong_beat.play()
    play_obj.wait_done()  # 阻塞直到当前音频播放完毕
    time.sleep(0.5)
    temp += 1
    print(temp)

补充说明

如果你的音频文件播放时长超过0.5秒,time.sleep(0.5)会导致下一次播放提前触发,容易引发播放队列的冲突问题,这时候方案2的等待播放完成逻辑会更稳定。

内容的提问来源于stack exchange,提问作者DarkMud OfHorror

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 01:18:12