4

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

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

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

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

else:
   ^

IndentationError: unexpected indent

写完print statement后我该怎么办?Enter显然不起作用,因为它正在将光标向前移动,而当我用来space指向正确的指针时,它给了我一个错误。

4

7 回答 7

7

从您的帖子中很难看出问题所在,但 anif-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.

请参阅此Python 文档/教程if以及其他教程

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

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

随着您更新的帖子:

   if xyzzy.endswith('l'):
       print xyzzy
   else:
       something_else
于 2012-09-04T15:52:42.677 回答
2

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

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

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

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

不要仅仅因为这些行“看起来”就好像它们的缩进相同,就认为它们缩进相同。一种可以使用空格,一种可以使用制表符(或某种组合)。

于 2012-09-04T15:58:46.953 回答
2

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

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

在你的情况下,

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

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

于 2012-09-04T15:53:18.863 回答
1

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

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

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

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

于 2014-06-16T14:25:54.597 回答
1

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

只要您不做任何需要在if,elifelse.

这里有些例子:

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 的一大特点——代码的可读性。

另请注意,上述示例也可以轻松应用于forwhileif如果您使用三元条件运算符,您可以更进一步,对单行块进行一些疯狂的嵌套。

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

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

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

我希望这能稍微澄清一下情况,什么是允许的,什么是不允许的。;)

于 2016-01-18T14:14:10.467 回答
0

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

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

于 2014-11-10T21:37:42.863 回答
0

实际上,这是一个 Python IDLE UI 问题:一旦你Enterif块完成后点击,接下来的else语句已经与if语句一致。无需提供任何制表符或空格来进行缩进。下面是图片供参考。

在此处输入图像描述

于 2019-01-16T10:36:26.863 回答