python中IF-ELSE块的缩进

时间:2012-09-04 15:51:20

标签: python indentation

您好我是python新手,我正在使用python工作NLP。我在写python中的if-else块时遇到错误。当我写作时,只有当时阻止它正常工作:

if xyzzy.endswith('l'):
    print xyzzy

进入冒号后我按下回车键,它会自动将我带到正确的缩进处。

但是当我在print语句后按“Enter”键后尝试添加else块时, 它正在考虑它只是IF块的声明,所以它给了我不正确的缩进,因为我想要阻止之后,而当我试图写其他阻止我自己它给我这个错误。

else:  
   ^

IndentationError: unexpected indent

那么在写完print语句后我该怎么办?输入显然不起作用,因为它正在向前移动光标,而当我使用空格来到正确的指针时它会给我一个错误。

7 个答案:

答案 0 :(得分:5)

很难从帖子中看到问题所在,但if-else的格式是这样的

 if someCondition:
     do_something       # could be a single statement, or a series of statements
 else:
     do_something_else  # could be a single statement, or a series of statements

即,else需要与相应的if处于相同的级别。

ifPython doc/tutorial上见other tutorial

有时当你的编辑器为你自动编辑并且你手动编辑时,事情可能会搞砸,所以你必须弄清楚你的编辑器如何处理缩进(例如,它总是使用tabs或空格? ,如果你点击返回等会发生什么。)

此外,要警惕混合制表符和空格,这也会导致问题(很难发现,因为两者都是“看不见的”)

使用您更新的帖子:

   if xyzzy.endswith('l'):
       print xyzzy
   else:
       something_else

答案 1 :(得分:2)

缩进正确并不是Python的问题,而是您用于源代码的编辑器的问题。

大多数了解Python的编辑器会在冒号后正确添加一级缩进(如您所见)。因为您可以在该代码块中拥有任意数量的语句,编辑器无法知道何时“突出”else的下一行。

在开始输入之前,你必须通过点击行上的退格或换档标签告诉编辑器这个行。

如果在编写其余代码后插入else部分,请确保用于缩进的字符与if语句的字符相同。如果if语句使用空格缩进,请为else使用相同数量的空格。如果使用一个或多个选项卡缩进if语句,请对else语句使用相同数量的选项卡。不要混合使用空格和制表符进行缩进。

不要以为只是因为线条“看起来”就像它们缩进一样,它们 缩进相同。可以使用空格,也可以使用制表符(或某些组合)。

答案 2 :(得分:1)

else应与与之耦合的if处于同一缩进级别:

if x:
    # do something
else:
    # do something else

在你的情况下,

if xyzzy.endswith('l'):
    print xyzzy
else:
    # something else

即使您的编辑器是自动缩进的,您仍然应该取消缩进以使代码在语法上正确。

答案 3 :(得分:1)

" - 当我使用空间来找到正确的指针时,它会给我一个错误" 当然。使用空间永远不会产生"换行",通常这在Unix系统中是\ n。如果您在其他编辑器(例如Windows中的记事本)中打开.py文件,您会发现您的else语句与print相同。

" - 输入显然不起作用,因为它正在向前推进 - " 按退格键正确的时间以达到与IF语句相同的缩进级别。

答案 4 :(得分:1)

我完全同意接受的答案。是的,indention在Python中非常重要,但要声明if-else必须始终看起来像这种格式有点过分。

Python只允许你在ifelif或{{1}

以下是一些例子:

else

通常不建议在一行中包含太多语句,因为这样你就失去了Python的一个重要特性 - 代码的可读性。

另请注意,上述示例也可以轻松应用于choice = 1 # if with one-liner if choice == 1: print('This is choice 1') # if-else with one-liners if choice == 1: print('This is choice 1') else: print('This is a choice other than 1') # if-else if with one-liners if choice == 1: print('This is choice 1') elif choice == 2: print('This is choice 2') # if-else if-else with one-liners if choice == 1: print('This is choice 1') elif choice == 2: print('This is choice 2') else: print('This is a choice other than 1 and 2') # Multiple simple statements on a single line have to be separated by a semicolumn (;) except for the last one on the line if choice == 1: print('First statement'); print('Second statement'); print('Third statement') for。如果使用三元条件运算符,您可以更进一步做一些while块的疯狂嵌套。

以下是运营商的看法:

if

这样做基本上是创建一个简单的flag = True print('Flag is set to %s' % ('AWESOME' if True else 'BORING')) 语句。如果你需要更多的分支(但不是复杂的分支),你可以用一个单行器嵌入它。

希望这可以澄清一下情况,允许和不允许的情况。 ;)

答案 5 :(得分:0)

即使缩进看起来正确,我也收到了这个错误。 在Notepad ++中查看,可以选择查看空格和制表符。该错误是由混合空格和制表符以创建缩进引起的。 用每行中的空格替换Tabs有助于消除错误。

答案 6 :(得分:0)

实际上这是Python IDLE UI的问题:如果if块完成后按回车键,则next else语句已与if语句一起使用。无需提供任何制表符或空格来缩进。下面是图像供参考。

enter image description here