为什么我确实有明显的错误,为什么Python可以正确执行我的代码?

时间:2019-01-24 01:57:02

标签: python-3.x

当我在Python中练习一些if语句时,我遇到一个奇怪的问题,使我对Python如何精确地执行程序感到困惑。 参考以下代码:

x = 63

if x >= 0 and x <= 9:
    print("X is One digit, and it is: " , x)
elif x >= 10 and x <= 99:
    print("X is Two digits, and it is: " , x) # the error begins here
elif x >= 100 and x <= 999:
    print("X is Three digits, and it is: " + x)
else:
    print("X is a negative number, and it is: " + x)

如果x的值在0-99之间,则程序将正常运行。尽管很明显它包含一个错误。为什么我仍然得到输出。这让我真的对Python如何执行程序感到好奇!

1 个答案:

答案 0 :(得分:0)

该程序在语法上是有效的Python,但是+操作将在字符串和整数之间失败,但允许在字符串和字符串之间进行。

另一方面,逗号是有效的,因为print适用于任意数量的对象。您可以通过在函数对象上调用help来知道它接受什么参数。 print默认情况下会在参数之间添加一个额外的空格,因此字符串中冒号后面的空格可能也是一个错误。

Python不会强制进行静态类型检查。如果您习惯使用静态类型的语言,这可能会令人惊讶。这种类型的错误直到运行时才发生,但是如果不执行分支则根本不会发生。您甚至可以在运行程序之前,使用mypy等外部静态类型检查器以及Python的类型注释语法来捕获这种类型错误。

在执行代码之前,很难检测到Python中的许多错误。这就是为什么您应该编写测试以执行所有代码的原因。语法错误仍然会在您运行程序之前显示。

Python还允许链式比较,所以

0 <= x <= 9

会更Python化。