Python随笔11

异常:

  异常不是语法错误,异常是一个事件是一个错误,当程序遇到这个异常时,要么去处理它要么终止并退出。如果异常没有处理,Python会调用回溯(traceback一种错误信息)并终止执行。Exception是所有异常的基类,Python利用exception object来表示异常。处理异常是用try: except:语句来包裹可能会出现异常的代码块。

try:
#     可疑代码块
# except Exception1:     单个try语句可以抛出多个异常,可以用多个except语句,也可以用一个except语句处理所有异常
#         ........
# except Exception2:     如果代码在try:块不产生异常,可以在else语句中执行,else语句不需要try:块的保护,else语句必须在except之后
#         ........
# else:
#     ...........

  一个简单的例子:

try:
    print(1/0)
except ZeroDivisionError:
    print("被除数不能为0!")

  结果:

被除数不能为0!

  这样就将一个错误处理掉了。

  再举一个例子:

try:
    x  = int(input("除数:"))
    y = int(input("被除数"))
    print(x/y)
except ZeroDivisionError:
    print("被除数为0")
# 捕捉多个异常
except (ValueError,TypeError) as e:
    print("被除数非整数")
    print(e)
# 在try中可疑代码块无异常时执行
else:
    print("结果正常运行")

  当我们输入的被除数为0、非整数、非int型数据时,会分别抛出不同的异常

  finally关键字:

  finally关键字总是放在最后,而且不管有没有异常总会被执行。同样也可以放在函数中。

  例子:

  

while True:
    try:
        x = int(input("除数:"))
        y = int(input("被除数"))
        print(x / y)
    except Exception as e:
        print("错误信息为", e)
    else:
        print("计算正确")
        break
    finally:
        print("结束!")

  无论有没有异常,finally总会被执行

  

def function1(x,y):
    try:
        result=x/y
    except Exception as e:
        print(e)
    else:
        print(result)
    finally:
        print("结束了")
#
print(function1(1,"x"))

  不管参数如何,finally语句总会被执行

  异常具有传递性,我们必须在可能发生异常的地方处理掉异常 

def faulty():
    raise Exception("someting is wrong!")
def ignore_exception():
    faulty()
print(ignore_exception())

  比方我们在最开始有一个异常faulty(),没有去处理它,在ignore_exception()它也继续存在,一直到我们调用这个ignore_exception()函数还是存在

Traceback (most recent call last):
  File "D:/PythonDemo/异常3--finally.py", line 40, in <module>
    print(ignore_exception())
  File "D:/PythonDemo/异常3--finally.py", line 32, in ignore_exception
    faulty()
  File "D:/PythonDemo/异常3--finally.py", line 30, in faulty
    raise Exception("someting is wrong!")
Exception: someting is wrong!
原文地址:https://www.cnblogs.com/bigbigtong/p/10247086.html