day17-异常处理

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

开始今日份整理程序员

1.异常spa

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

2.异常的分类blog

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

2.2逻辑错误:(常见)input

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

3.异常的处理io

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

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

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 结尾,这样根本看不到本身的代码有什么问题。