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的代码就不会执行。
总结
- 执行
try中的代码 - 如果出现异常:匹配对应
except分支执行,跳过else - 如果try全程没有任何异常:跳过所有except,执行
else
Previous: continue 关键字
Next: 运行单独 py 文件