意外 mouse/keyboard 输入时,tqdm 在 Windows 控制台上崩溃
tqdm crashes on Windows console upon accidental mouse/keyboard input
运行在 Windows 上使用 tqdm
进度条的任何应用程序已成为一个令人头疼的问题。
我不清楚这是否是 Windows 故障,但该错误很容易重现。 运行 cmd.exe 或 Powershell 上的以下代码:
from tqdm import *
import time
counter = 1000
for i in tqdm(range(counter)):
time.sleep(.01)
您可以在进度条增加时执行以下操作来触发崩溃:
- 使用 鼠标左键 按钮 select window 上的几个字符(即使空格也可以,如下面的屏幕截图所示)然后 右键单击 或按任意键使应用程序崩溃:
错误消息说:
Traceback (most recent call last):
File "tqdmTest.py", line 5, in <module>
for i in tqdm(range(counter)):
File "C:\Users\brcod\AppData\Roaming\Python\Python34\site-packages\tqdm\_tqdm.py", line 979, in __iter__
sp(self.__repr__())
File "C:\Users\brcod\AppData\Roaming\Python\Python34\site-packages\tqdm\_tqdm.py", line 241, in print_status
fp_write('\r' + s + (' ' * max(last_len[0] - len_s, 0)))
File "C:\Users\brcod\AppData\Roaming\Python\Python34\site-packages\tqdm\_tqdm.py", line 234, in fp_write
fp.write(_unicode(s))
OSError: raw write() returned invalid length 306 (should have been between 0 and 153)
我在 Windows 10 和 上使用 Python 3.4.4 tqdm 4.19.5.
这很烦人,因为鼠标不小心 select 在 window 中插入了几个字符,而我正试图单击它以聚焦 window。
谁能解释一下为什么会这样?这个问题有适当的解决方法吗?
解决方案 1:这个问题最简单的解决方案是在 的属性中禁用 QuickEdit Mode cmd.exe window防止鼠标点击不小心选择粘贴文字:
解决方案 2:这也可以通过编程方式处理。只需重写循环以捕获异常并在异常发生时pass
它:
from tqdm import *
import time
maxCount = 1000
pbar = tqdm(total = maxCount)
for i in range(maxCount+1):
try:
pbar.update(i - pbar.n)
except OSError as e:
pass
time.sleep(.01)
pbar.close()
运行在 Windows 上使用 tqdm
进度条的任何应用程序已成为一个令人头疼的问题。
我不清楚这是否是 Windows 故障,但该错误很容易重现。 运行 cmd.exe 或 Powershell 上的以下代码:
from tqdm import *
import time
counter = 1000
for i in tqdm(range(counter)):
time.sleep(.01)
您可以在进度条增加时执行以下操作来触发崩溃:
- 使用 鼠标左键 按钮 select window 上的几个字符(即使空格也可以,如下面的屏幕截图所示)然后 右键单击 或按任意键使应用程序崩溃:
错误消息说:
Traceback (most recent call last):
File "tqdmTest.py", line 5, in <module>
for i in tqdm(range(counter)):
File "C:\Users\brcod\AppData\Roaming\Python\Python34\site-packages\tqdm\_tqdm.py", line 979, in __iter__
sp(self.__repr__())
File "C:\Users\brcod\AppData\Roaming\Python\Python34\site-packages\tqdm\_tqdm.py", line 241, in print_status
fp_write('\r' + s + (' ' * max(last_len[0] - len_s, 0)))
File "C:\Users\brcod\AppData\Roaming\Python\Python34\site-packages\tqdm\_tqdm.py", line 234, in fp_write
fp.write(_unicode(s))
OSError: raw write() returned invalid length 306 (should have been between 0 and 153)
我在 Windows 10 和 上使用 Python 3.4.4 tqdm 4.19.5.
这很烦人,因为鼠标不小心 select 在 window 中插入了几个字符,而我正试图单击它以聚焦 window。
谁能解释一下为什么会这样?这个问题有适当的解决方法吗?
解决方案 1:这个问题最简单的解决方案是在 的属性中禁用 QuickEdit Mode cmd.exe window防止鼠标点击不小心选择粘贴文字:
解决方案 2:这也可以通过编程方式处理。只需重写循环以捕获异常并在异常发生时pass
它:
from tqdm import *
import time
maxCount = 1000
pbar = tqdm(total = maxCount)
for i in range(maxCount+1):
try:
pbar.update(i - pbar.n)
except OSError as e:
pass
time.sleep(.01)
pbar.close()