繁体   English   中英

Python 中 IF-ELSE 块的缩进

[英]Indentation of an IF-ELSE block in Python

我是 Python 新手,我正在使用 Python 研究NLP 我在 Python 中编写if-else块时出错。 当我当时只写一个if块时,它工作正常:

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

输入冒号 ( : ) 后,我按Enter ,它会自动将我带到正确的缩进。

但是当我在打印语句之后按Enter键后尝试向它添加一个else块时,它认为它只是一个IF块的语句,所以它给了我不正确的缩进,因为我想要一个else块,而当我尝试编写 else 阻止我自己时,它给了我这个错误。

else:
   ^

IndentationError: unexpected indent

写完print语句后应该怎么做? Enter显然不起作用,因为它将光标向前移动,而当我使用空格来找到正确的指针时,它给了我一个错误。

从您的帖子中很难看出问题是什么,但是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处于同一级别。

请参阅有关if Python 文档/教程,以及其他教程

有时,当您的编辑器为您自动缩进而您也手动编辑时,事情可能会变得一团糟,因此您必须弄清楚您的编辑器如何处理缩进(例如,它是否总是使用tabs或空格?,如果您按回车键会发生什么)等等)。

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

随着您更新的帖子:

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

else应该与它耦合的if处于相同的缩进级别:

if x:
    # Do something
else:
    # Do something else

在你的情况下,

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

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

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

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

在开始键入之前,您必须通过在该行上按退格键或Shift + Tab来告诉编辑器缩进该行。

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

不要以为只是因为行“看”,好像他们缩进相同的,他们缩进相同。 一个可以使用空格,一个可以使用制表符(或某种组合)。

当我使用空格来找到正确的指针时,它给了我一个错误

当然。 使用空格永远不会造成“换行”,在 Unix 系统中通常是 \\n 。 如果您在不同的编辑器(例如 Windows 中的记事本)中打开 .py 文件,您会看到 else 语句与打印在同一行。

Enter显然不起作用,因为它使光标向前移动

按退格键正确的次数以达到与IF语句相同的缩进级别。

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

Python 允许您使用单行(甚至多行),只要您不做任何需要在ifelifelse主体中缩进的花哨的else

这里有些例子:

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')

通常不建议在一行中打包太多语句,因为那样你会失去 Python 的一大特性——代码的可读性。

还要注意,上面的例子也可以很容易地应用于forwhile 如果您使用三元条件运算符,您可以更进一步地对单行if块进行一些疯狂的嵌套。

以下是操作员通常的样子:

flag = True
print('Flag is set to %s' % ('AWESOME' if True else 'BORING'))

基本上,它创建了一个简单的if-else语句。 如果您需要更多分支(但不是复杂分支),您可以将它嵌入其中一个单行代码中。

我希望这能稍微澄清一下情况以及允许和不允许的情况。 ;)

即使缩进看起来正确,我也一直收到此错误。

Notepad++ 中查看有一个选项可以查看空格和制表符。 该错误是由混合空格和制表符以创建缩进引起的。 在每一行中用空格替换制表符有助于消除错误。

实际上,这是一个 Python IDLE UI 问题:在if块完成后按Enter 键后,接下来else语句已经与if语句一致。 不需要提供任何制表符或空格来进行缩进。 下面是图片供参考。

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM