day17-异常处理

今天的内容比较少,只是单独的异常处理

开始今日份整理

1.异常

定义:异常时错误发生的信号,一旦出错,并且程序没有处理这个错误,就会抛出异常,并且程序会运行中止

2.异常的分类

2.1语法错误:python会在运行之前,会先检查语法是否错误,这个是程序员代码中不应该出现的,需要时刻注意

2.2逻辑错误:(常见)

  • ValueError
  • NameError
  • IndexError
  • KeyError
  • AttributeError
  • TypeError
  • Exception:万能错误参数

3.异常的处理

  • 强调一:对于错误的条件可以预知的,此时应该用if判断来预防
  • 强调二:对于错误发生的条件不可预知的,应该用异常处理机制进行判断

第一种方式:单分支机构,try………except………

try:
    l1 = [1,2,3]
    l1[100]  # IndexError
    print(333)
    print(5555)
    # dic = {'key1':'v1'}
    # dic['key2']  # KeyError
    print(777)
except IndexError as e:
    print(e)

第二种方式:多分支机构,try .except  except ....多支

try:
    l1 = [1,2,3]
    # l1[100]  # IndexError
    print(333)
    print(5555)
    dic = {'key1':'v1'}
    # dic['key2']  # KeyError
    num = int(input('请输入选项:'))
    print(777)
except IndexError as e:
    print(e)
except KeyError as e:
    print(e)

第三种方式:万能异常  Exception

try:
    l1 = [1,2,3]
    # l1[100]  # IndexError
    print(333)
    print(5555)
    dic = {'key1':'v1'}
    # dic['key2']  # KeyError
    num = int(input('请输入选项:'))
    print(777)
except Exception as e:
    print(e)

# 以上这三种分情况讨论:
# 1,如果你对报错信息不关系,只是想直接跳过报错而不分流执行代码。 万能异常最好。
# 2,如果你想要捕捉具体的错误信息,根据不同的错误执行不同的分支。多分支比较好

第四种方式:多分支加万能异常

try:
    num = input('请输入你要办理的业务:').strip()
    num = int(num)
    menu_dict[num]()
except ValueError:
    print('请输入数字')
except KeyError:
    print('超出范围,请重新输入')
except Exception:
    print("出现未知错误.....")

第五种方式,主动触发异常,之前有用过,

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

第六种方式,断言,代码完成有明确的结果

assert ('name' in info)and ('age' in info)
#有着明确的结果

第七种方式,自定义异常类型,

毕竟异常的种类不是一成不变的,有可能异常的种类还是一直在增加,这个时候就需要自己创建一个异常种类了

class PhoneconnectionError(BaseException):#手机连接失败
    pass

try:
    raise PhoneconnectionError('连接错误...')
except PhoneconnectionError as e:
    print(e)

 

最后的最后,在代码中尽量少用try开头,except 结尾,这样根本看不到自己的代码有什么问题。

posted @ 2019-01-19 15:27  柴犬砍柴  阅读(206)  评论(0编辑  收藏  举报