【问题标题】:Traceback (most recent call last) EOFErrorTraceback(最近一次调用最后一次)EOFError
【发布时间】:2014-09-24 11:05:27
【问题描述】:

这是我的代码

t=input()
for q in range(t):
  s=raw_input()
  m,n=s.split(' ')
  ans = (m*n)*(m*n-1)
  if(m>1 and n>1):
    ans -= 4*(n-1)(m-2) + 4*(m-1)*(n-2)
  print ans

有错误

Traceback (most recent call last):
  Line 1, in <module>
  t=raw_input()
 EOFError

我做错了什么?请告诉我 这是链接

http://codepad.org/nmL96e68

【问题讨论】:

  • 键盘没有 STDIN 选项,试试ideone.com/z328vR。在您的系统上,运行文件后手动输入这些项目或使用 shell 重定向:python file.py &lt; input.txt
  • ..你不能多个两个字符串,所以先将mn转换为整数。
  • 下次使用真正的 python解释器代替随机在线服务。
  • @Ashwini 感谢您的回复,现在我收到此错误,请您帮我解决这个错误。这是链接ideone.com/isvZP2
  • 您的代码有多个错误。首先以ans = (m*n)*(m*n-1) 开头,因为mn 是字符串。

标签: python python-2.7 raw-input eoferror


【解决方案1】:

来自input上的python文档:

等效于 eval(raw_input(prompt))。

此函数不会捕获用户错误。如果输入在语法上无效,则会引发 SyntaxError。如果评估期间出现错误,可能会引发其他异常。

所以如果你的输入是空的,你会得到一个EOFError

避免在第 1 行使用输入,而是使用 raw_input。尝试在代码中添加一些错误消息和验证,如下所示:

import sys
try:
    t = int(raw_input())
except:
    print "No repetition parameters set, using 1"
    t = 1
for q in range(t):
    s = raw_input()
    try:
        m,n = s.split(' ')
        m = int(m)
        n = int(n)
    except:
        print "Invalid input, enter two integers separated by space"
        sys.exit(1)
    ans = (m*n)*(m*n-1)
    if(m > 1 and n > 1):
        ans -= 4*(n-1)*(m-2) + 4*(m-1)*(n-2)
    print ans

正如有人建议的那样,始终在真正的 Python 解释器上测试您的代码。

【讨论】:

  • try/except 在这里很重要,因为如果用户在不写任何输入的情况下按 RETURN,则会引发 EOFError。
  • 感谢您的回复好友。抱歉之前的评论被删除了。
【解决方案2】:

这可能是您想要实现的,假设mn 是整数类型值,

t = input()
for q in range(t):
    s = raw_input()
    m, n = map(int, s.split(' '))
    ans = (m * n) * (m * n - 1)
    if m > 1 and n > 1:
        ans -= 4 * (n - 1) * (m - 2) + 4 * (m - 1) * (n - 2)
    print ans

【讨论】:

  • 谢谢,是的,但是为什么你使用地图,我不想使用地图,这是修改后的链接,你能告诉我我现在是如何克服这个错误的。 ideone.com/isvZP2
  • 我建议你使用map。修复缩进后,检查代码中的第 9 行。将其从 ans -= 4*(n-1)(m-2) + 4*(m-1)*(n-2) 更改为 ans -= 4*(n-1)*(m-2) + 4*(m-1)*(n-2)
  • 在我看来,我的代码和你的代码是相同的,并且具有相同的缩进,但我的代码仍然出现错误,不要明白ideone.com/isvZP2
  • 您将tabspace 混淆了。在 for 循环的第一行中,您有 4 个空格,其余行有制表符缩进。问题出在s =raw_input() 行。使其成为缩进tab
猜你喜欢
  • 2021-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-19
  • 2020-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多