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.
    """