求老哥们解决一下 Python 的输入问题

2019-09-05 10:47:58 +08:00
 mushuiyu
如题,以前做多行输入的时候一直用的 while true 循环,通过 try 和 except 的报错机制控制连续的多行输入,也没什么问题,但是昨天用编译器的时候发现,不能跳出输入循环了……用 sys.stdin 的输入也不行,很纠结不知道是怎么回事,贴一个我的测试代码:
import collections

dict_sum = collections.OrderedDict()

while True:
try:
key = input().split('\\')[-1]
if key in dict_sum:
dict_sum[key] += 1
else:
dict_sum[key] = 1
except :
break

list1 = sorted(dict_sum.items(),key = lambda x:x[1],reverse = True)
print(list1)
n = 8
for item in list1:
if n>0:

print(item[0].split()[0][-16:],item[0].split()[1],item[1])

n += -1
执行输入以后疯狂摁回车也不能跳出 while 循环,现在真的有点烦躁,不知道怎么回事,这个代码我以前用一模一样的运行是没问题的……
2042 次点击
所在节点    Python
5 条回复
arrow8899
2019-09-05 13:45:06 +08:00
if key == 'exit':
break
Vegetable
2019-09-05 14:36:07 +08:00
你这哪有退出 while 的判断啊?根本没有退出条件,str.split("sth")返回的列表是永远不为空的,你那个 try 除了 ctrl+c 就不会捕捉到错误.
mushuiyu
2019-09-05 14:48:28 +08:00
@Vegetable 就是在 try 下面就有一条 input ()的赋值语句啊,如果输入为空的话,就会报错然后跳到 except 那里去
676529483
2019-09-05 15:08:37 +08:00
是不是 py 版本的问题? py2 的 input 会报 EOF,py3 会返回空字符串,所以就退出不了了
Vegetable
2019-09-06 11:22:55 +08:00
@mushuiyu input()会得到一个空字符串

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/598132

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX