相同的错误但不同的错误报告。为啥?

Posted

技术标签:

【中文标题】相同的错误但不同的错误报告。为啥?【英文标题】:Same mistake but different error report. Why?相同的错误但不同的错误报告。为什么? 【发布时间】:2012-10-28 23:30:57 【问题描述】:

为什么 Python 会出于相同的原因报告不同的错误,即具有 1 行和 2 行代码的程序?

我的意思是:

print(1

给了

Error: unexpected EOF while parsing

但是

a = 1+1
print(1

给了

Error: invalid syntax

同样的问题 - 但错误信息不同 - 原因?

sys.version_info(major=3, minor=2, micro=0, releaselevel='final',serial=0)

【问题讨论】:

这些是什么提示:->?或者您是在谈论您执行的文件中的 Python 代码?怎么样? -> 只显示代码的起始行,抱歉。第一个程序有 1 行代码,第二个程序有 2 行代码。 我似乎无法重现第一个错误。你用的是什么版本的 Python? 我认为是 Python3 - sys.version_info(major=3, minor=2, micro=0, releaselevel='final', serial=0) 谁在乎?这是无效的语法,它会指出错误的确切位置。语法错误报告方式的细微差别不是您应该依赖的行为,并且会随着每个版本而改变。 【参考方案1】:

在您的第一种情况下,python 正在“寻找”它的第一行/命令。 一个程序的最小值是至少一个语句。所以它抱怨提前终止。

所以第一个错误EOF(文件结束)意味着: '嘿,我期待至少一个命令,但突然一行结束了......''你确定程序完成了吗?'

前一个错误已运行,因此编译器“知道”这是一个程序。

而且错误是不同的,但这意味着:

'嘿,我现在这个位置有一个错误,你能修复你的 sintaxe' 吗?

我希望我的非学术方式不会分散你的注意力:)

【讨论】:

2Carlos:这是否意味着,除了执行 1 行程序之外,我在任何其他情况下都没有机会遇到“EOF”错误? 当您确实有“流控制”(例如读取 tcp 套接字或文件)并且突然“中断”时,您可能会遇到相同的错误。因此,当您处理 Internet 套接字并收到此错误时,它会变得很奇怪……您会感觉:“什么??没有文件..',但在你理解“文件”的含义之后。极客笔记:大型机 z/OS 仍然使用 TAPE 面额来表示磁盘和卷......

以上是关于相同的错误但不同的错误报告。为啥?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Firebase 报告错误的屏幕数据?

为啥 FFMPEG 报告错误的持续时间?

为啥不在 PHP 中使用最高错误报告级别?

为啥导出的模块错误报告定义的函数“不是函数”

为啥 cuda-memcheck racecheck 报告 cufft 错误?

为啥 MySQL 会在 FULL OUTER JOIN 上报告语法错误?