📜  在Codechef中更正Python中的EOF错误

📅  最后修改于: 2021-05-20 07:16:15             🧑  作者: Mango

EOF代表文件结束嗯,从技术上讲,这不是错误,而是例外。当内置函数之一(最常见的是input())返回文件尾(EOF)而不读取任何数据时,会引发此异常。

在某些特定情况下, Python中出现EOF错误:

  • 有时,所有程序尝试做的就是获取某些内容并对其进行修改。但是,当无法获取时,将引发此异常。
  • 输入()函数在两个Python 2.7版和Python 3.6+时,或者当被中断输入()达到出乎意料在Python 2.7文件的末尾。

Python的所有内置异常都继承自BaseException 类或从其中继承的类扩展。此错误的完整异常层次结构为:

在任何平台上进行编码时,避免PythonEOF的最佳实践是捕获异常,并且我们无需执行任何操作,因此,我们只需在“ except”块中使用关键字“ pass”传递异常即可。

考虑下面的代码,以解决CodeChef K-Foldable String(KFOLD)中的问题:

C++
#Python program for the above question
  
#Function to reorder the characters
#of the string
def main():
    t = int(input())
    while t:
  
        # Input variables 
        n, k = map(int, input().split())
        s = input()
        ans = ""
  
        # Initialize dictionary
        s_dict = dict()
        for ch in s:
            s_dict[ch] = s_dict.get(ch, 0) + 1
        q = n// k
        a1 = s_dict['1']// q
        a0 = s_dict['0']// q
  
        # Check for valid conditions
        if(s_dict['1']%2!=0 or s_dict['0']%2!=0 \\
        or s_dict['1']%q!=0 or s_dict['0']%q!=0):
            ans = "Impossible"
  
        # Otherwise update the result
        else:
            st = ('0'*a0) + ('1'*a1)
            st = ('1'*a1) + ('0'*a0)
            part1 = st + st_rev
            ans = part1*(q// 2)
  
        # Print the result for the
        # current test case
        print(ans)
  
        t -= 1
    return
  
# Driver Code
if __name__=="__main__":
    main()


C++
# Python program for the above question
  
# Function to reorder the characters
#of the string
try : t = int(input())
  
    # Input test cases
    while t:
  
        # Input Variables
        n, k = map(int, input().split())
        s = input()
        ans = ""
  
        # Initialize dictionary
        s_dict = dict()
        for ch in s:
            s_dict[ch] = s_dict.get(ch, 0) + 1
        q = n// k
        a1 = s_dict['1']// q
        a0 = s_dict['0']// q
  
        # Check for valid conditions
        if(s_dict['1']%2!=0 or s_dict['0']%2!=0 \\ 
        or s_dict['1']%q!=0 or s_dict['0']%q!=0):
            ans = "Impossible"
   
        # Otherwise update the result
        else:
            st = ('0'*a0) + ('1'*a1)
            st = ('1'*a1) + ('0'*a0)
            part1 = st + st_rev
            ans = part1*(q// 2)
  
        # Print the result for the
        # current test case
        print(ans)
  
        t -= 1
  
except:
    pass


输出:

它给出了EOF错误,如下所示:

上述EOF错误的解决方案是将代码括在try和except块中 并相应地处理异常,下面显示了处理此异常的方法:

C++

# Python program for the above question
  
# Function to reorder the characters
#of the string
try : t = int(input())
  
    # Input test cases
    while t:
  
        # Input Variables
        n, k = map(int, input().split())
        s = input()
        ans = ""
  
        # Initialize dictionary
        s_dict = dict()
        for ch in s:
            s_dict[ch] = s_dict.get(ch, 0) + 1
        q = n// k
        a1 = s_dict['1']// q
        a0 = s_dict['0']// q
  
        # Check for valid conditions
        if(s_dict['1']%2!=0 or s_dict['0']%2!=0 \\ 
        or s_dict['1']%q!=0 or s_dict['0']%q!=0):
            ans = "Impossible"
   
        # Otherwise update the result
        else:
            st = ('0'*a0) + ('1'*a1)
            st = ('1'*a1) + ('0'*a0)
            part1 = st + st_rev
            ans = part1*(q// 2)
  
        # Print the result for the
        # current test case
        print(ans)
  
        t -= 1
  
except:
    pass

输出: