如何在python中使用sys.stdin.read()

时间:2018-07-06 08:43:25

标签: python peewee

我正在尝试使用peewee模块在用户输入的数据库中保存多个文本,但是当我在控制台中按ctrl + d时,它给了我EOFError。我认为问题出在sys.stdin.read()上。我解决这个问题? 这是代码:

enter 'q' to quit
a) add an entry
v) view entries
action: a
Enter your entry. press ctrl+d when finished
some text
and more
^D
Save Entry?[Yn]Traceback (most recent call last):
  File "C:/Users/Xylose/Desktop/small lab/peewee/venv/dairy.py", line 61, in <module>
    menu_loop()
  File "C:/Users/Xylose/Desktop/small lab/peewee/venv/dairy.py", line 34, in menu_loop
    menu[choice]()
  File "C:/Users/Xylose/Desktop/small lab/peewee/venv/dairy.py", line 42, in add_entry
    if input('Save Entry?[Yn]').lower()!='n':
EOFError: EOF when reading a line

Process finished with exit code 1

这是我在pycharm中遇到的错误:

g = sns.FacetGrid(masterdata,row="departmentid",col = "coursename",hue="resulttype",size=5, aspect=1)
g=g.map(plt.scatter, "totalscore", "semesterPercentage")

2 个答案:

答案 0 :(得分:2)

在Python中

EOFError: EOF when reading a line 

此错误有两个原因

1。以错误的方式/格式读取文件

 import sys
 for line in sys.stdin:
     print (line)

这是我们如何使用“ sys.stdln”进行阅读的方法

2。如果文件已损坏,则有另一个机会发生相同的错误

答案 1 :(得分:1)

通常允许在Ctrl-D之后从stdin读取,但是我仅在Ubuntu上进行了测试(与您的代码相似的代码运行良好)。我看到它正在Windows上运行,并且Windows控制台的行为可能有所不同,并在Ctrl-D之后拒绝任何read()操作。一种可能的解决方案是使用try / except语句捕获EOFError异常,并在异常发生时关闭并重新打开sys.stdin。像这样:

# note: check that sys.stdin.isatty() is True!

try:
    # read/input here

except EOFError:

    sys.stdin.close()
    sys.stdin = open("con","r")
    continue # or whatever you need to do to repeat the input cycle