Python这个缩进让我焦头烂额!最奇葩的缩进,没有之一!

Python这个缩进让我焦头烂额!最奇葩的缩进,没有之一!

例如如下程序。

s_age = input("请输入您的年龄:")
age = int(s_age)
if age > 20 :
# 只有当age > 20时,下面用整体缩进的代码块才会执行
# 整体缩进的语句是一个整体,要么一起执行,要么一起不执行
print("年龄已经大于20岁了")
print("20岁以上的人应该学会承担责任...")

运行上面代码,如果输入年龄小于20,将会看到如下运行结果。

请输入您的年龄:18

从上面代码可以看出,如果输入的年龄小于20,则程序没有任何输出,整体缩进的语句作为整体都不会执行。

运行上面代码,如果输入年龄大于20,将会看到如下运行结果。

请输入您的年龄:24
年龄已经大于20岁了
20岁以上的人应该学会承担责任...

从上面代码可以看出,如果输入的年龄大于20,则程序会执行整体缩进的代码块。

再次重复:Python不是格式自由的语言,因此你不能随心所欲地缩进,必须按Python语法要求缩进。下面详细介绍在缩进过程中可能导致的错误。

不要忘记缩进

代码块一定要缩进,否则就不是代码块。例如如下程序。

s_age = input("请输入您的年龄:")
age = int(s_age)
if age > 20 :
print("年龄已经大于20岁了")

上面程序的if条件与下面的print语句位于同一条竖线上,这样在if条件下就没有受控制的代码块了。因此,上面程序执行时会报出如下错误。

 File "no_indent.py", line 19
print("年龄已经大于20岁了")
^
IndentationError: expected an indented block

注意:if条件后的条件执行体一定要缩进。只有缩进后的代码才能算条件执行体。

接下来读者会产生一个疑问:代码块(条件执行体)到底要缩进多少呢?这个随意。你可以缩进1个空格、2个空格、3个空格……或1个Tab位,这都是符合语法要求的。但从编程习惯来看,Python通常建议缩进4个空格。

有些时候,Python解释器不会报错,但并不代表程序没有错误。例如如下代码。

s_age = input("请输入您的年龄:")
age = int(s_age)
if age > 20 :
print("年龄已经大于20岁了")
print("20岁以上的人应该学会承担责任...")

解释执行上面程序,程序不会报任何错误。但如果输入一个小于20的年龄,则可看到如下运行过程。

请输入您的年龄:12
20岁以上的人应该学会承担责任...

从运行过程可以看出,我们输入的年龄明明小于20,但运行结果还是会打印“20岁以上……”。这是为什么呢?就是因为这条print语句没有缩进。如果这行代码不缩进,那么Python就不会把这行代码当成条件执行体,它就不受if条件的控制,因此无论用户输入什么年龄,print语句总会执行。

如果忘记正确地缩进,很可能导致程序的运行结果超出我们的预期。例如如下程序。

Python这个缩进让我焦头烂额!最奇葩的缩进,没有之一!

上面代码中以粗体字标识的代码行:print("b不大于4")总会执行,因为这行代码没有缩进,因此它就不属于else后的条件执行体,else后的条件执行体只有b - =1这一行代码。

如果要让print("b不大于4")语句也处于else控制之下,则需要让这行代码也缩进4个空格。

if、else、elif后的条件执行体必须使用相同缩进的代码块,将这个代码块整体作为条件执行体。当if后有多条语句作为条件执行体时,如果忘记了缩进某一行代码,则会引起语法错误。看下面代码(程序清单同上)。

Python这个缩进让我焦头烂额!最奇葩的缩进,没有之一!

在上面代码中,因为if后的条件执行体的最后一条语句没有缩进,所以系统只把c - = 1一行代码作为条件执行体,当c -= 1语句执行结束后,if语句也就执行结束了。后面的print("c大于4")已经是一行普通代码,不再属于条件执行体,从而导致else语句没有if语句,引发编译错误。

运行上面代码,将看到如下错误。

 File "no_indent2.py", line 35
else
^
SyntaxError: invalid syntax

为了改正上面的代码,需要让print("c大于4")也缩进4个空格。

不要随意缩进

需要说明的是,虽然Python语法允许代码块随意缩进N个空格,但同一个代码块内的代码必须保持相同的缩进,不能一会缩进2个空格,一会缩进4个空格。

例如如下代码。

欢迎加群:960410445  一起交流哦!

s_age = input("请输入您的年龄:")
age = int(s_age)
if age > 20 :
print("年龄已经大于20岁了")
print("20岁以上的人应该学会承担责任...")

上面程序中第二条print语句缩进了5个空格,在这样的情况下,Python解释器认为这条语句与前一条语句(缩进了4个空格)不是同一个代码块(这就是游标卡尺笑话的由来),因此Python解释器会报错。运行上面代码,将会报出如下错误。

 File "indent_error2.py", line 20
print("20岁以上的人应该学会承担责任...")
^
IndentationError: unexpected indent

把代码改为如下形式。

s_age = input("请输入您的年龄:")
age = int(s_age)
if age > 20 :
print("年龄已经大于20岁了")
print("20岁以上的人应该学会承担责任...")

上面程序中第二条print语句只缩进了3个空格,它与前一条print语句(缩进了4个空格)同样不属于同一个代码块,因此Python解释器还是会报错。运行上面代码,则会报出如下错误。

 File "indent_error3.py", line 20
print("20岁以上的人应该学会承担责任...")
^
IndentationError: unindent does not match any outer indentation level

通过上面介绍可以看出,Python代码块中的所有语句必须保持相同的缩进,既不能多,也不能少。

注意:位于同一个代码块中的所有语句必须保持相同的缩进,既不能多,也不能少。

另外,需要说明的是,对于不需要使用代码块的地方,千万不要随意缩进,否则程序也会报错。例如如下简单的程序。

msg = "Hello, Charlie"
print(msg)

上面程序只有两条简单的执行语句,并没有包括分支、循环等流程控制,因此不应该使用缩进。解释执行上面代码,将会看到如下错误。

 File "redundant_indent.py", line 17
print(msg)
^
IndentationError: unexpected indent

猜你喜欢

转载自www.cnblogs.com/65py/p/10148989.html