zoukankan      html  css  js  c++  java
  • 异常处理

    什么是异常?

    异常发生之后在他后面的代码就不执行了。


    为什么要进行异常处理?

    不处理你的程序还怎么运行?


    异常处理的方法:

    1,使用if判断语句

    1 num1=input('>>: ') #输入一个字符串试试
    2 int(num1)
    正常的代码
     1 num1=input('>>: ') #输入一个字符串试试
     2 if num1.isdigit():
     3     int(num1) #我们的正统程序放到了这里,其余的都属于异常处理范畴
     4 elif num1.isspace():
     5     print('输入的是空格,就执行我这里的逻辑')
     6 elif len(num1) == 0:
     7     print('输入的是空,就执行我这里的逻辑')
     8 else:
     9     print('其他情情况,执行我这里的逻辑')
    10 
    11 '''
    12 问题一:
    13 使用if的方式我们只为第一段代码加上了异常处理,但这些if,跟你的代码逻辑并无关系,这样你的代码会因为可读性差而不容易被看懂
    14 问题二:
    15 这只是我们代码中的一个小逻辑,如果类似的逻辑多,那么每一次都需要判断这些内容,就会倒置我们的代码特别冗长。
    16 '''
    使用if进行异常处理

    总结:

    1、if判断式的异常处理只能针对某一段代码,对于不同的代码段的相同类型的错误你需要重复的if来进行处理。

    2、在你的程序中频繁的写与程序本身无关,与异常处理有关的if,会使得你的代码可读性极其的差

    3、if是可以解决异常的,只是存在1、2的问题,所以,千万不要妄下定论if不能用来异常处理

    1 def test():
    2     print('test running')
    3 choice_dic={
    4     '1':test
    5 }
    6 while True:
    7     choice=input('>>: ').strip()
    8     if not choice or choice not in choice_dic:continue #这便是一种异常处理机制啊
    9     choice_dic[choice]()
    例子

    Python为每一种异常定制了一个类型,然后提供了一种特定的语法结构用来进行异常处理

    基本语法:

    try:
         被检测的代码块
    except 异常类型:
         try中一旦检测到异常,就执行这个位置的逻辑
    
    1 f = open('a.txt')
    2 g = (line.strip() for line in f)
    3 for line in g:
    4     print(line)
    5 else:
    6     f.close()
    before
     1 try:
     2     f = open('a.txt')
     3     g = (line.strip() for line in f)
     4     print(next(g))
     5     print(next(g))
     6     print(next(g))
     7     print(next(g))
     8     print(next(g))
     9 except StopIteration:
    10     f.close()
    11 '''
    12 next(g)会触发迭代f,依次next(g)就可以读取文件的一行行内容,无论文件a.txt有多大,同一时刻内存中只有一行内容。
    13 提示:g是基于文件句柄f而存在的,因而只能在next(g)抛出异常StopIteration后才可以执行f.close()
    14 '''
    after

    异常类智能用来处理指定的异常情况,如果非指定类则无法处理,报错

    1 s1 = 'hello'
    2 try:
    3     int(s1)
    4 except IndexError as e:
    5     print(e)
    6 '''ValueError写为IndexError,错误'''
    上边的

    多分枝:一个try里可以有多个except;

    万能异常:Exception-----------可以捕获任意异常

    try......except 中的else语句,在try代码块内没有异常则执行

    finally 语句,无论有没有异常都执行

    1 #主动触发异常
    2 try:
    3     raise TypeError('类型错误')
    4 except Exception as e:
    5     print(e)
    异常触发
     1 #自定义异常
     2 class EvaException(BaseException):
     3     def __init__(self,msg):
     4         self.msg=msg
     5     def __str__(self):
     6         return self.msg
     7 try:
     8     raise EvaException('类型错误')
     9 except EvaException as e:
    10     print(e)
    自定义异常

    断言(assert)+判断,正确执行下边的,错误从该位置终止程序。


     

  • 相关阅读:
    Tree Constructe(icpc济南)(二分图+构造)
    Cleaning(CF1474D)
    Matrix Equation (2020icpc济南)
    关于位运算
    poj2540半平面交+判范围
    做题记录0(并查集|树状数组)
    ac自动机
    二次剩余
    BSGS算法
    无向图的桥
  • 原文地址:https://www.cnblogs.com/52-qq/p/7382243.html
Copyright © 2011-2022 走看看