区分语义错误、逻辑错误和运行时错误

Differentiating semantic error, logic error and runtime error

提问人:Reyomi 提问时间:10/31/2023 更新时间:11/4/2023 访问量:44

问:

今天,我遇到了这个考试问题(这与考试问题不完全相同,但想法是一样的):

Which of the following codes is semantic error?

A) a = 'abc' + 123

B) for i in range(5)

C) b = 7/0

D) [i for i in range(10**19)]

正如我在讲座中学到的,一般来说,有 4 种类型的错误:语法错误、运行时错误、逻辑错误和语义错误。在此基础上,我认为返回 ZeroDivisionError 的是运行时错误、逻辑错误和语义错误。但是,在我看来,这也是语义错误,因为也许程序员想这样做。CAa = 'abc' + '123'

我知道这个话题已经被提起了很多次,但我仍然很困惑,无法发现这些类型的错误之间的区别。如果可能的话,您能否回答上述问题并区分这些定义?先谢谢你!

python 运行时错误 语法错误

评论

1赞 slothrop 10/31/2023
根据讲座,“逻辑错误”和“语义错误”有什么区别?
0赞 Reyomi 10/31/2023
他們告訴我,語義錯誤是指程式的意義,所以就像我們是意思,但電腦誤解了,而邏輯錯誤是因為我們錯誤地理解了它。(我可能在某个地方误解了他们,这对我来说太抽象了)
0赞 slothrop 10/31/2023
右。我以前没有真正听说过这个定义,但我可能会说 A 是语义错误。你可以看到程序员可能想做什么,在某些语言中它会起作用,但当然在 Python 中它不会。
0赞 chepner 10/31/2023
A) 也是一个运行时错误;这些类别并不相互排斥。
0赞 Reyomi 10/31/2023
Ikr,这些错误的定义令人困惑。此外,A 也可能是逻辑错误,因为可能是程序员误解了任务。显然,所有这些都是运行时错误。

答:

1赞 Reyomi 11/4/2023 #1

语义错误是指程序员误解了编程语言的工作原理,并编写了在语言规则上下文中没有意义的代码。代码可能在语法上是正确的,但它违反了语言的规则或“语义”。因此,第一段代码是语义错误。

第二段代码是 SyntaxError,第三段代码是 RuntimeError,最后一段代码是 MemoryError 或 TimeoutError。