python异常处理

day13回顾
模块和包
import 语句
示例:
import math
import mypack.games.contra
math.xxx
mypack.games.contra.xxx
from import 语句
示例:
from math import sin
sin() # 不需要加模块名或包路径
from mypack.games.contra import play
play() # 多余
from import *语句
同上

sys模块
sys.path
sys.version
sys.modules
sys.argv
sys.exit() 退出程序
  自定义
xxxx.py
全局变量 ---> 属性
预置属性
__doc__属性(当前模块的文档字符串)
__file__属性(绑定路径)
__name__属性(用来绑定模块名,区分主模块和非主模块)

from import * 语句导入
__all__ = ['aaa', 'bbb']
_xxxx = 1000 # 隐藏属性 

  随机模块 random


__init__.py

__all__ 列表一定要在__init__.py

包的导入
绝对导入
  from mypack.games.contra import *
相对导入
  from .menu import show_menu
from ..xxxx import yyyy

搜索路径:
当前路径
sys.path指定的路径


day14笔记
异常 exception
什么是错误
错误是指由于逻辑或语法等导致一个程序无法正常执行的问题

  什么是异常
    异常是程序出错时标识的一种状态
    当异常发生时,程序不会再向下执行,而转去调用此函数的地方待处理此错误并恢复为正常状态
    作用:
用作信号,通知上层调用者有错误产生需要处理

try语句的两种法
try-except语句
try-finally语句

try-except语法
try:
可能触发异常的语法
except 错误类型1 [as 变量1]:
异常处理语句1
except 错误类型2 [as 变量2]:
  异常处理语句2
except (错误类型3,错误类型4):
异常处理语句3
....
except:
异常处理语句other
else:
末发生异常语句
finally:
最终语句

作用:
偿式捕获异常(接收异常通知),将程序转为正常状态并继承执行
    

语法说明:
as 子句是用于绑定错误对象的变量,可以省略
except 子句可以有一个或多个,但至少要有一个
else 子句最多只能有一个,也可以省略不写
finally 子句最多只能有一个,也可以省略不写
示例见:
try_except.py

 

练习:
写一个函数 get_score() 来获取学生输入的成绩 (0 ~ 100的整数)
输如果入出现异常,则让此函数返回0,否则返回用户输入的成绩

def get_score():
....

score = get_score()
print("学生的成绩是:", score)

注:
try-except语句也可以放在函数的内部使用

 

try-finally语句
语法:
try:
可能触发异常的语句
finally:
最终语句
说明:
finally 子句不可以省略
一定不存在except子句
作用:
通常用try-finally语句来做触发异常时必须要处理的事情,无论异常是否发生,finally子句都会被执行
try-finally 语句不会改变程序的(正常/异常状态)

示例:
try_finally.py


try语句嵌套
try嵌套是指一个try语句嵌套在另一个try语句内使用

示例:
try_embed.py


raise 语句:
作用:
触发一个错误,让程序进入异常状态
发送错误通知给调用者
语法:
raise 异常类型

raise 异常对象

raise # 重新触发上一次异常
示例见:
raise.py
raise2.py

练习:
写一个函数 get_age() 用来获取一个人的年龄信息
此函数规定用户只能输入1~140之间的整数,如果用户输入其它的数则直接触发ValueError类型的错误来通知调用者

def get_age():
...

try:
age = get_age():
print("用户输入的年龄是: ", age)
except ValueError as err:
print("用户输入的不是1~140的整数,获取年龄失败!")


assert 语句(断言语句)
语法:
assert 真值表达式, 错误数据(通常是字符串)
作用:
当真值表达式为False时,用错误数据创建一个AssertionError类型的错误raise出去,并进入异常状态
等同于:
if 真值表达式 == False:
raise AssertionError(错误数据)

 

为什么要用异常处理机制
在程序调用层数较深时,向主调函数传递错误信息需要层层return 返回比较麻烦,所以用异常处理机制

 

posted @ 2019-04-16 21:52  全宇宙第一帅  阅读(396)  评论(0编辑  收藏  举报