Python 文件对象析构函数中的键盘中断关闭失败:sys.excepthook丢失丢失sys.stderr
在执行时Python 文件对象析构函数中的键盘中断关闭失败:sys.excepthook丢失丢失sys.stderr,python,Python,在执行时 #!/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 sente
#!/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
我还要按clr+c
它不是自己封闭的
我试过这个
链接也有,但没有说请帮助首先,你的问题在这里:
KeyboardInterrupt
close failed in file object destructor:
sys.excepthook is missing
lost sys.stderr
行
未被修改,因此,如果其为真一次,则始终为真,而
则无法结束
然后,键盘中断
不是来自您的执行,而是来自您按下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]))
另外,
find\u pun\u position
可能是一个更好的名称…在句子拆分器
功能中检查缩进。python中需要正确的缩进。
#!/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.
"""