Why does standard input() cause an EOF error

Yajur Tayal picture Yajur Tayal · Nov 27, 2016 · Viewed 17.2k times · Source

I was solving a problem on HackerRank when I encountered the following problem in my code. I tested it out on my Python (2.7.10) IDLE , and it was working fine. But it showed the following error on HackerRank:

Traceback (most recent call last):
  File "solution.py", line 13, in <module>
    input_2=input()
EOFError: EOF when reading a line

I entered the following code:

import sys 
input_2=""
n=int(input())
m=0
l=0
array=[]
main_array=[]
for i in range (0,n):
    inp=input()
    array=(inp.split(" "))
    main_array+=array   
for no in range(0,100000,1):    
    input_2=input()
    for m in range(0,len(main_array),2):
        l=0
        if input_2==main_array[m]:
            l+=1
            print (main_array[m]+"="+main_array[m+1])
    if l==0:
        print ("Not found")

I don't know why this error turned up in the HackerRank Engine. Thanks

Answer

Yuchao Jiang picture Yuchao Jiang · Aug 1, 2017

I encountered similar EOF issues when I coded in HackerRank. Actually, there are 2 issues:

  1. use input() in Python3 and raw_input() in Python2.
  2. If you know the exact number of input, you can N-number for-loop to handle each input(). However, the difficulty is that you don't know how many inputs you will have. In this case, you will have to use sys.stdin.readlines() to convert them into a list, and then use a for-each loop.

The following codes are from "Editorial" of https://www.hackerrank.com/challenges/30-dictionaries-and-maps/

import sys 

# Read input and assemble Phone Book
n = int(input())
phoneBook = {}
for i in range(n):
    contact = input().split(' ')
    phoneBook[contact[0]] = contact[1]

# Process Queries
lines = sys.stdin.readlines()  # convert lines to list
for i in lines:
    name = i.strip()
    if name in phoneBook:
        print(name + '=' + str( phoneBook[name] ))
    else:
        print('Not found')