#!/usr/bin/env python
import sys, re
def find_position(line):
pun = ""
if re.search(r"[.?!]+", line):
pun = re.search(r"[.?!]+", line).group()
pos = line.find(pun)
pos = pos+len(pun)-1
return pos
def sentence_splitter(filename):
f = open(filename, "r")
for line in f:
line = line.strip()
print line + "n"
while line:
pos = find_position(line)
line2 = line[ : pos+1].split(" ")
length = len(line2)
last_word = line2[length -1]
try:
if re.search(r"[A-Z]+.*", last_word) or line[pos+1] != " " or line[pos+2].islower() :
print line[:pos+1],
line = line[pos+1:]
else:
print line[ : pos+1]
line = line[pos+1 :]
except :
print " error here!!"
f.close()
return " bye bye"
if __name__=="__main__":
print sentence_splitter(sys.argv[1])
在执行它时
python sentence_splitter6.py README | more
发生错误
KeyboardInterrupt
close failed in file object destructor:
sys.excepthook is missing
lost sys.stderr
我还必须按CLR + C
它不是自己封闭
的尝试过这方面的东西如何处理引发异常的文件析构函数?
如何静音"sys.excepthook 丢失"错误?
链接也,但不满意,请帮助
首先,你的问题就在这里:
while line:
pos = find_position(line)
line2 = line[:pos + 1].split(" ")
length = len(line2)
last_word = line2[length - 1]
line
没有被修改,所以如果它曾经是真的,它总是真的,while
没有办法结束。
然后,KeyboardInterrupt
不是来自您的执行,而是来自您按下 C-c
,停止您的程序。
此外,在编写python代码时,您还应该尊重PEP8,也可以使用flakes8
和/或pylint
进行检查。
这是符合PEP8的版本(仍然有无限循环(:
#!/usr/bin/env python3
import sys, re
def find_position(line):
pun = ""
if re.search(r"[.?!]+", line):
pun = re.search(r"[.?!]+", line).group()
pos = line.find(pun)
pos = pos+len(pun)-1
return pos
def sentence_splitter(filename):
with open(filename, "r") as infile:
for line in infile:
line = line.strip()
print(line + "n")
while line:
pos = find_position(line)
line2 = line[:pos + 1].split(" ")
length = len(line2)
last_word = line2[length - 1]
if ((re.search(r"[A-Z]+.*", last_word) or
line[pos+1] != " " or
line[pos+2].islower())):
print(line[:pos+1], end='')
line = line[pos+1:]
else:
print(line[:pos + 1])
line = line[pos + 1:]
return " bye bye"
if __name__ == "__main__":
print(sentence_splitter(sys.argv[1]))
最后,你应该注释你的代码,以便包括你在内的每个人都能理解你在做什么,比如:
def find_position(line):
"""Finds the position of a pun in the line.
"""
另外find_pun_position
可能是一个更好的名字...