异常处理 try‑except

1. 异常是什么

访问字典中不存在的key,会抛出 KeyError 程序直接崩溃。

fridge_contents = {"egg":8, "mushroom":20, "pepper":3, "cheese":2, "tomato":4, "milk":13}
# orange juice这个key不存在,直接运行会报 KeyError
if fridge_contents["orange juice"] > 3:
    print("Sure, let's have some juice!")Code language: PHP (php)

2. try‑except 捕获异常

语法:

try:
    # 可能出错的代码
    可能报错的语句
except 错误类型:
    # 发生该错误时执行
    异常处理代码Code language: PHP (php)

示例

foods = {"egg":8}
try:
    if foods["juice"]>3:
        print("来点橙汁吧")
except KeyError:
    print("对不起我们没有橙汁")Code language: PHP (php)

易错点:except KeyError: 冒号不能缺失,缩进要对齐,不能写成 except: KeyError

获取错误详情 as error

try:
    if foods["juice"]>3:
        print("来点橙汁吧")
except KeyError as error:
    print(error)   # 打印出错的key:'juice'Code language: PHP (php)

捕获多种不同异常

写多个except,分别处理不同错误

try:
    if foods["juice"]>3:
        print("来点橙汁吧")
except KeyError as error:
    print(error)
except TypeError:
    pass   # pass代表什么都不做,忽略这个异常Code language: PHP (php)
  • pass:占位语句,什么都不执行,仅仅语法占位,用来安静忽略不重要异常。

3. try … else

else:只有try里面代码完全没有报错,才会执行else里面的代码;一旦发生异常,else不会跑。

foods = {"egg":8}
try:
    if foods["egg"]>2:
        print("来点橙汁吧")
except KeyError as error:
    print(error)
except TypeError:
    pass
else:
    print("吃饱了吗")Code language: PHP (php)

运行输出:

来点橙汁吧
吃饱了吗

try块没有报错,else执行。
如果try里面触发KeyError,else的代码就不会执行。

总结

  1. 执行try中的代码
  2. 如果出现异常:匹配对应except分支执行,跳过else
  3. 如果try全程没有任何异常:跳过所有except,执行else

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注