【问题标题】:Python IDLE 3.3.2 "expected an indent block" errorPython IDLE 3.3.2“预期缩进块”错误
【发布时间】:2026-01-11 21:05:02
【问题描述】:

我的第一个 Python 代码。

所以,我大约 45 分钟前才开始编码,在尝试自己解决此问题后,我决定寻求帮助。请随时对我的代码草率、不稳定等提出一些建设性的批评。我在 Lua 方面比在 Python 方面要好得多。我在 IDLE Python GUI 中遇到的问题是,当我按 F5 在 Python Shell 中运行它时,它给了我一个错误,说“需要一个缩进块”,但没有告诉我在哪里放置缩进块。我想从一些简单的事情开始,所以我编写了一个工作“年龄计算器”,代码如下:

# Importing necessary modules #

import time
import math

# Start Application #

print ("The age calculator!")
time.sleep(1)
print ("May I collect some information about you?")
yn = (input("Yes or No: "))

# if-elif Based Decisions #

if yn != Yes or No:
    ynInvalid()

elif yn == No:
    exit()

elif yn == Yes:
    ynYes()

elif yn != Yes or No:
    ynInvalid()

#Defining Functions#

def PrintInfo():
    print ("Hello", name, "Nice to meet you!")

def AgeCheck():
    if age <= 0:
    print("Invalid Age!")
    elif age > 0:
    days = age * 365
    minutes = age * 525948
    seconds = age *  31556926
    print("Doing some math please wait...")
    time.sleep(4)
    print(name,"you been alive for", days,"days", minutes, "minutes and", seconds, "seconds, Wow you're really old!")

def ynYes():

    time.sleep(2)
    print (" Please enter your name below.")
    time.sleep(1)
    name = input("Name: ")
    time.sleep(1)
    PrintInfo()
    age = int(input("Age: "))
    AgeCheck()

def ynYesRetry():

    age = int(input("Age: "))
    AgeCheck()

def ynInvalid():
    print("Invalid Argument! Please try Again!")
    ynYesRetry()

【问题讨论】:

  • 附带说明:if yn != Yes or No: 并不代表您认为的意思。首先,Yes 不是有效值,No 也不是。您可能想要字符串'Yes''No'。而且,一旦你解决了这个问题,yn != 'Yes' or 'No' 就会询问yn 是否等于'Yes' or 'No' 的值,这与'Yes' 相同。即使你做对了,every 值不是“是”或不是“否”,对吧?您可能想要的是if yn != 'Yes' and yn != 'No'if yn not in ('Yes', 'No')
  • 另一个问题是你没有传递你的变量。编写age = int(input("Age: ")) 只是在该函数中创建一个局部变量。 AgeCheck 函数中的代码无法访问该变量。您需要做的就是将其作为参数传递。做def AgeCheck(age):,然后调用它为AgeCheck(age)

标签: python python-3.x block python-idle indentation


【解决方案1】:

IDLE 永远不会只给你一个错误而不告诉你错误发生在哪里。如果您发布完整的追溯,人们可以弄清楚它的含义,向您解释,并希望下次您可以自己做。

此外,复制和粘贴实际错误而不是解释它,可以让人们更容易调试您的问题。

在这种情况下,一眼就能看出您至少有一个缩进错误:

def AgeCheck():
    if age <= 0:
    print("Invalid Age!")

if 语句的主体必须比条件部分缩进更多。

更一般地说,任何以: 结尾的东西总是后面跟着一个缩进块。

您可能还有其他缩进错误;这个甚至可能不是 IDLE 告诉你的那个。但希望这些信息足以让您自己找到并修复它们。

【讨论】:

  • 我不是来质疑你的知识,但 IDLE 只是给了我这个:gyazo.com/f1a8eeedb82658c440a3f68e94964441 它也启动了 shell,但你可以看到没有回溯。
  • 当我执行完全相同的操作并单击“确定”时,它会将我带到出错的行:print("Invalid Age!") 行。如果您不向试图帮助您的人展示这一点,我们必须猜测。
  • 你说得对,通常它就是这样做的,但它并没有显示它在哪一行,我必须打开 Notepad+ 看看我是否能找到错误。无论如何,我已经修复了错误。我提示我 Utabify 一切,这似乎奏效了。
  • 如果错误弹出窗口没有将您带到错误行,那么您的 IDLE 设置有问题,您可能想要修复它,或者使用不同的环境来运行 Python。 (就我个人而言,我发现一个好的程序员编辑器和一个运行 ipython 的终端/DOS 窗口比 IDLE 有用得多;如果我想要一个 IDE,我需要更智能的东西,比如 Eclipse PyDev,但我很少需要。但是当然是 YMMV。)
【解决方案2】:
if age <= 0:
print("Invalid Age!")
elif age > 0:
days = age * 365

你没有正确缩进。

if age <= 0:
    print("Invalid Age!")
elif age > 0:
    days = age * 365

【讨论】:

    【解决方案3】:

    AgeCheck 应该是:

    def AgeCheck():
        if age <= 0:
            print("Invalid Age!")
        elif age > 0:
            days = age * 365
            minutes = age * 525948
            seconds = age *  31556926
            print("Doing some math please wait...")
            time.sleep(4)
            print(name,"you been alive for", days,"days", minutes, "minutes and", seconds, "seconds, Wow you're really old!")
    

    您需要在所有 if 和 elif 语句之后缩进。这就是 Python 知道语句结果中包含的内容的方式。

    【讨论】: