光看这程序似乎也没有什么问题,而且卡住也有多种原因,题主的情况也不一定是卡住——我猜题主是根据一直没有输出来判断的吧。
还是先讲我的处理方案——调试。看来题主用的是类似于PyCharm的IDE,可以用IDE自带的调试器。我还是习惯于传统的print+logging+pysnooper:logging是自带的日志模块,可以选择输出高于某一级别(info、debug、error、critical等)的输出内容,可以调节为比较低的等级以输出更多的信息;另一个pysnooper是第三方的,输出的内容更详细,操作也更简单,就是耗费时间更长。有关的教程请题主自己查阅。找到明显的错误之后,就是百度+谷歌+stackoverflow大法即可。
另外,如果题主的程序是真的卡住了——比如说无法执行语句之类的“假死”状态(自己定义的,不能保证规范性),这种情况下一般应用程序会显示“无响应”,但也不敢保证微软bug导致没有显示出来。我的一种判断方法是进入任务管理器,看“python.exe”的进程的CPU和内存占用量。如果短时间内迅速上升,超出预期,就要考虑是不是“假死”。另外一种判断就是在异常处理中专门捕获KeyboardInterrupt异常,在程序持续无输出的时候按Ctrl+C尝试中断。具体操作如下:
try:
# ... your code here
except Exception as e: # catch all kinds of exceptions
if e.__class__ == KeyboardInterrupt: # if keyboard interruption is caught
raise KeyboardInterrupt # halt the program
# ... your remaining code here
由此可以用Ctrl+C中断,此时Python应当会抛出异常,同时会给出程序回溯的路线,这个时候可以依此找出卡住的语句。如果发现如此设置还是中止不了................
(PS:如果做了上述的异常处理,并加入了logging或pysnooper等,可能在控制台上看不到回溯,这个时候就要查看日志文件里的内容。)
非常抱歉,我也没办法.........毕竟这种情况也很罕见,没有太多的经验............
以上。