You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python运行登录程序报elif后需缩进块的IndentationError排查

Python elif分支后缩进报错排查

报错根因

Python属于强制缩进语法,if/elif/else条件分支、函数定义、循环语句的声明行末尾加冒号后,下一行必须写缩进的执行代码,不允许留空直接接下一级逻辑。
你触发报错的位置是选项D对应的elif choice == "D" or choice == "d":分支,这行声明完之后没有任何缩进代码,直接接了后续的else:块,不符合Python语法要求。
顺带提两个代码里的其他逻辑问题:

  • 退出选项C对应的分支写的是sys.exit,没有加调用括号,实际运行时不会触发程序退出,需要写成sys.exit()
  • else分支的错误提示和实际菜单选项不匹配,当前菜单有A/B/C/D四个选项,原提示只写了只能选A或B,提示信息不准确
  • 原代码把密码生成逻辑写在了全局作用域,程序一启动就会自动打印密码,不符合菜单交互的设计逻辑

修正方案

如果D选项的生成密码功能还没开发完成,先在elif块下加pass关键字做语法占位即可;如果要直接实现功能,把密码生成逻辑写到缩进块里就行。
修正后的菜单分支代码参考:

import csv
import sys
import string
import random
import secrets

password_length = 10

def main():
    menu()


def menu():
    print("************Gelos Enterpises Login**************")
    print()

    choice = input("""
                      A: Please Register
                      B: Login
                      C: Logout
                      D: Generate Password
        
                      Please enter your choice: """)

    if choice == "A" or choice == "a":
        register()
    elif choice == "B" or choice == "b":
        login()
    elif choice == "C" or choice == "c":
        sys.exit()
    elif choice == "D" or choice == "d":
        # 功能未开发完成时可替换为pass占位
        print("生成的安全随机密码:", secrets.token_urlsafe(password_length))
    else:
        print("输入无效,请选择A/B/C/D中的对应选项")
        print("请重试")
        menu()


def register():
    pass


def login():
    pass


main()

替换完对应代码之后,缩进错误就会消失,程序可以正常运行。

内容的提问来源于stack exchange,提问作者user13422020

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 21:42:16