大家好,我是小吴!欢迎来到从零开始学Python第十三期。
前几期我们学完了 if 条件判断语句,还有 for、while 两种循环,相信大家已经可以独立写出不少简单程序了。
但写代码的时候,你大概率碰到过这种情况:程序要求用户输入数字,结果用户输入了文字,这时程序就会直接抛出错误、停止运行,满屏红色报错信息。
面对这种不按规则出牌的情况,就可以用到 try‑except 异常处理结构。合理使用它,就算用户输入不符合要求的内容,程序也不会直接终止,能够继续正常往下执行。
一、异常处理基础语法
try: 语句块 #优先执行这部分代码except 异常类型: 语句块 #仅在发生指定异常时执行
核心逻辑:
• 先运行 try 里面的代码;
• 如果执行过程中发生错误,程序不会直接终止,会跳到对应的 except 代码块执行,执行完成后继续运行后续代码。
举个很常见的例子:我们编写代码让用户输入数字进行运算,当用户随意输入文字、符号等非数字内容时。不使用 try‑except 的情况下,程序会直接抛出 ValueError (值错误)报错并强制终止运行。
加上异常处理后,我们可以自定义友好的提示文字,提醒用户输入格式有误,程序不会闪退,能够正常继续运行。
try: num = int(input('请输入一个整数:')) print(num)except ValueError: print('输入的不是整数!请重新运行程序。')
二、三种常用写法,用好异常处理
① 捕获多种指定异常
程序运行时会出现不同类型错误,我们可以分开捕获,针对不同错误给出对应的提示。
try: 语句块 #放置可能报错的代码except ValueError: 语句块 #处理值错误,例如输入文本却要求数字except ZeroDivisionError: 语句块 #处理除数为0的错误except FileNotFoundError: 语句块 #处理文件不存在的错误
分开捕获异常的好处是,我们可以针对每一类错误给出明确提示,方便用户理解哪里出了问题。
② 捕获全部异常
如果你不想区分错误类型,可以直接写不带异常类型的 except。
但是不建议这样写,因为这种写法不会输出错误详情,出 bug 的时候很难定位问题。
更推荐下面这种写法:
try: 语句块except Exception as e: print(f"发生未知错误:{e}")
Exception 可以捕获绝大多数异常,同时把错误详情保存到变量e,打印就能看到详细报错信息——既安全,又清晰。
知识点提醒:except Exception 不会捕获系统退出类异常,比如KeyboardInterrupt(键盘中断),这类异常需要单独写 except 捕获。
③ else 和 finally 的使用
else:当try里的代码完全没有出错时执行
finally:无论是否出错,最后都会执行(适合做清理工作)
try: 语句块 #主要业务代码except 异常类型: 语句块 #出现异常时执行else: 语句块 #try内代码完全没有报错,才会执行这里finally: 语句块 #无论是否发生异常,这部分代码一定会执行, #适合清理工作,比如关闭文件、断开连接等
二者搭配可以让代码逻辑更完整、程序运行更规范,避免出现资源未关闭、流程不完整等问题。有了它们,你的程序就能做到 “有始有终”。
三、实战:编写带异常捕获的计算器
结合上面所有知识点,我们来实现一个计算器。可以处理非法数字、除零、用户强制中断等情况,不会轻易崩溃。
大家可以自行测试这几种场景:
• 输入文本代替数字,触发ValueError;
• 第二个数字输入 0 做除法,触发ZeroDivisionError;
• 按下键盘 Ctrl+C,触发KeyboardInterrupt实现退出;
• 其他意料之外的问题,会被最后的 Exception 捕获。
以上就是本期全部内容。
拜拜👋,我们下期见!