避免python常见的五类缩进错误示例(初学者必须注意)

       Python通过使用缩进让代码更易读;简单地说,它要求你使用缩进让代码整洁而结构清晰。在较长的Python程序中,你将看到缩进程度各不相同的代码块,这让你对程序的组织结构有大致的认识。
当你开始编写必须正 确缩进的代码时,需要注意一些常见的缩进错误。例如,有时候,程序员会将不需要缩进的代码块缩进,而对于必须缩进的代码块却忘了缩进。通过查看这样的错误示例,有助于你以后避开它们,以及在它们出现在程序中时进行修复。下面来看python较为常见的缩进错误。


一、 忘记缩进


对于位于 for 语句后面且属于循环组成部分的代码行,一定要缩进。如果你忘记缩进,Python
会提醒你:

#magicians.py

magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(magician)


print 语句应缩进却没有缩进。Python没有找到期望缩进的代码块时,会让你知道哪
行代码有问题。
File "magicians.py", line 3
print(magician)
^
IndentationError: expected an indented block

通常,将紧跟在 for 语句后面的代码行缩进,可消除这种缩进错误。


二、忘记缩进额外的代码行


有时候,循环能够运行而不会报告错误,但结果可能会出乎意料。试图在循环中执行多项任
务,却忘记缩进其中的一些代码行时,就会出现这种情况。
例如,如果忘记缩进循环中的第2行代码(它告诉每位魔术师,我们期待他的下一次表演),
就会出现这种情况:

magicians = ['alice', 'david', 'carolina']
for magician in magicians:
    print(magician.title() + ", that was a great trick!")
    print("I can't wait to see your next trick, " + magician.title() + ".\n")


第二条 print 语句原本需要缩进,但Python发现 for 语句后面有一行代码是缩进的,
因此它没有报告错误。最终的结果是,对于列表中的每位魔术师,都执行了第一条 print 语句,
因为它缩进了;而第二条 print 语句没有缩进,因此它只在循环结束后执行一次。由于变量
magician 的终值为 'carolina' ,因此只有她收到了消息“looking forward to the next trick”:

Alice, that was a great trick!
David, that was a great trick!
Carolina, that was a great trick!
I can't wait to see your next trick, Carolina.


这是一个逻辑错误。从语法上看,这些Python代码是合法的,但由于存在逻辑错误,结果并
不符合预期。如果你预期某项操作将针对每个列表元素都执行一次,但它却只执行了一次,请确
定是否需要将一行或多行代码缩进。

三、不必要的缩进


如果你不小心缩进了无需缩进的代码行,Python将指出这一点:

# hello_world.py

message = "Hello Python world!"
    print(message)


print 语句无需缩进,因为它并不属于前一行代码,因此Python将指出这种错误:
File "hello_world.py", line 2
print(message)
^
IndentationError: unexpected indent

为避免意外缩进错误,请只缩进需要缩进的代码。在前面编写的程序中,只有要在 for 循环
中对每个元素执行的代码需要缩进。


四、循环后不必要的缩进


如果你不小心缩进了应在循环结束后执行的代码,这些代码将针对每个列表元素重复执行。
在有些情况下,这可能导致Python报告语法错误,但在大多数情况下,这只会导致逻辑错误。
例如,如果不小心缩进了感谢全体魔术师精彩表演的代码行,结果将如何呢?

magicians = ['alice', 'david', 'carolina']
for magician in magicians:
    print(magician.title() + ", that was a great trick!")
        print("I can't wait to see your next trick, " + magician.title() + ".\n")

            print("Thank you everyone, that was a great magic show!")


由于最后一行的代码行被缩进,它将针对列表中的每位魔术师执行一次,如下所示:
Alice, that was a great trick!
I can't wait to see your next trick, Alice.
 Thank you everyone, that was a great magic show!

David, that was a great trick!
I can't wait to see your next trick, David.
 Thank you everyone, that was a great magic show!
Carolina, that was a great trick!
I can't wait to see your next trick, Carolina.
 Thank you everyone, that was a great magic show!

这也是一个逻辑错误。Python不知道你的本意,只要代码符合语法,
它就会运行。如果原本只应执行一次的操作执行了多次,请确定你是否不应该缩进执行该操作的
代码。


五、 遗漏了冒号


for 语句末尾的冒号告诉Python,下一行是循环的第一行。

magicians = ['alice', 'david', 'carolina']
for magician in magicians
    print(magician)


如果你不小心遗漏了冒号,如上所示,将导致语法错误,因为Python不知道你意欲何为。这
种错误虽然易于消除,但并不那么容易发现。程序员为找出这样的单字符错误,花费的时间多得
令人惊讶。这样的错误之所以难以发现,是因为通常在我们的意料之外。

来源:图灵社区会员 江子涛Tesla(jiangzitao201314@foxmail.com)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_64880493_江哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值