少说话多写代码之Python学习045——类07(异常)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yysyangyangyangshan/article/details/84205137

异常是程序遇到错误了,这种错误有的是已知的,可预判的。有些是未知的,莫名其妙的。
比如,

s=1/0
print(s)

输出

Traceback (most recent call last):
  File "D:/work/Python/Class7.py", line 4, in <module>
    s=1/0
ZeroDivisionError: division by zero

对于一段代码,如果认为可能出现异常,可以对整段代码进行捕获异常。

try:
    b=0
    s=1/b
    print(s)
except Exception:
   print('出现异常:没有区分异常的种类')

输出

出现异常:没有区分异常的种类

捕获异常后可以像上面这样打印一个提示,也可以用raise抛出。交由调用的地方去捕获或者处理。

完整的异常捕获其实是这样,

try:
    b=0
    s=1/b
    print(s)
except Exception:
   print('出现异常:没有区分异常的种类')
finally:
    b=1
    s=1/b
    print(s)

输出

出现异常:没有区分异常的种类
1.0

上面代码中except Exception:处,可以有多个 except,比如,except  ZeroDivisionError:。有兴趣可以试试。

对于异常的语法其实大可不必深究和钻研,只需要会在你认为可能出错的地方捕获,然后处理或者抛出异常即可。
捕获异常有一个强大手段就是捕获所有异常,叫Exception,当然很多程序员认为捕获所有异常无法彰显出自己的技术是多么的牛逼,所以,会用一用一些编程语言中创建好的有针对性的异常,比如Python中有这些是创建好的异常。
Exception,任何异常
AttributeError,引用或则赋值失败异常
IOError,打开不存在的文件的异常
IndexError,使用序列中不存在的索引的异常
KeyError,使用映射中不存在的key的异常
NameError,找不到变量的异常
SyntaxError,代码形式错误的异常
TypeError,函数应用错误的类型的异常
ValueError,对象使用不合适的值的异常
ZeroDivisionError,除数为0的异常
对于有些程序员来说使用库里创建的异常不算本事,所以也可以自己创建异常。哎,如果碰到秀技术的也确实没办法,所以为了万一碰到也好读懂代码,可以简单了解下自定义异常。

class MySelfException(Exception):
    pass
e=MySelfException

使用MySelfException和使用Exception一样。

对于异常,有的时候需要捕获自己处理,但是有的时候宁可让异常抛出甚至中断程序,因为如果为了程序不崩溃而增加异常捕获,会导致有些错误无法知道,从而导致运算结果完全错误,这样造成的结果也许远比程序崩溃要大的多。

工程文件下载:https://download.csdn.net/download/yysyangyangyangshan/10792410

猜你喜欢

转载自blog.csdn.net/yysyangyangyangshan/article/details/84205137