异常处理

# 异常处理
# 常见异常
# SyntaxError 语法错误
# AttributeError 试图访问一个对象没有的属性
# IOError 输入/输出异常;基本上是无法打开文件
# ImportError 无法引入模块或包;基本上是路径问题或名称错误
# IndentationError 语法错误的子类;代码没有正确对齐
# IndexError 下标索引超出序列边界
# KeyError 试图访问字典中不存在的key
# KeyboardInterrupt Ctrl+c被按下
# NameError   使用一个还未被赋予对象的变量
# TypeError 传入的对象类型与要求不符合
# UnboundLocalError 试图访问一个还未被设置的局部变量 ,基本上是由于有另一个同名的全局变量,导致你以为正在访问它
# ValueError  传入一个调用者不期望的值,即使值的类型是正确的

# 异常处理的基本语法
# try:
#     被检测的代码块
# except 异常类型:
#     异常类型与异常一样,就执行这个位置的逻辑
# except 异常类型:       上面的异常类型没有再找这里的异常类型
#     异常类型与异常一样,就执行这个位置的逻辑
# ……
# else:
#     当try内代码没有异常时会执行这个位置的逻辑
# finally:
#     无论异常与否,都会执行这个位置的逻辑

s1 = 'hello'

try:
    int(s1)
except IndexError as e:
    print(e)
except ValueError as e:
    print(e)
except TypeError as e:
    print(e)

# 万能异常类型 Exception

s1 = 'hello'

try:
    int(s1)
except Exception as e:
    print(e)

# 主动触发异常

try:
    raise TypeError('类型错误')
except Exception as e:
    print(e)

# 自定义异常
class MyException(BaseException):       # 自定义异常必须继承BaseException类
    def __init__(self, msg):
        self.msg = msg

try:
    raise MyException('自定义异常')
except MyException as e:
    print(e)

# 断言  在程序的某个位置判断一下结果是不是想要的值,如果不是想要的值就抛出一个异常
assert 1 == 1    # 有点类似于if,如果等式成立,执行它下面的代码

# assert 1 == 2   # 如果等式不成立,抛出一个AssertionError的异常

 

posted @ 2018-08-14 19:55  四十不惑的编程之路  阅读(91)  评论(0编辑  收藏  举报