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
相关产品推荐
相关产品推荐

