【发布时间】:2019-06-13 13:15:44
【问题描述】:
我做了一个作为计时器的小功能,随着时间的推移更新线路(在这里放一秒钟进行测试。
我想使用 KeyboardInterrupt 来退出程序的这一部分,所以使用了 try/except 方法,但是发生了一些奇怪的事情。
使用 try/except,屏幕上不会打印任何内容。当我执行 Ctrl-C 时,所有语句一起打印(一个接一个)并且输入语句看起来很好。
像这样:
ou have been working for 0 minutesYou have been working for 1 minutesYou have been working for 2 minutesYou have been working for 3 minutesYou have been working for 4 minutesYou have been working for 5 minutesYou have been working for 6 minutesYou have been working for 7 minutesYou have been working for 8 minutesYou have been working for 9 minutesYou have been working for 10 minutesYou have been working for 11 minutesAre you sure you want to finish your working session ? (y/n)
这是我的代码:
def timer():
minutes = 0
startDateTime = datetime.datetime.now()
stringDateTime = startDateTime.strftime('%m/%d/%Y, at %H:%M:%S' )
while True:
try:
time.sleep(1)
print('You have been working for {} minutes'.format(minutes), end='')
minutes += 1
except KeyboardInterrupt:
choice = input('Are you sure you want to finish your working session ? (y/n)')
if choice == 'y':
log_time(stringDateTime, minutes)
elif choice == 'n':
pass
pass
这种行为是 try/except 固有的吗?
如果是,我还可以使用哪些其他解决方案?
最好的!
【问题讨论】:
-
这可能是您的打印功能永远不会刷新,因为您没有以换行符结束它。尝试将参数
flush=True添加到您的print()调用中。 -
输出默认缓冲。
-
顺便说一句,您的代码可以在我的 ipython notebook 中正常运行。
-
flush = True 确实会输出代码。尽管如此,它并没有像以前的代码那样“替换”每个打印,它只是并排打印。
-
解决方案我添加了
end = '\r'
标签: python python-3.x