Python 第八篇:异常处理、Socket语法、SocketServer实现多并发、进程和线程、线程锁、GIL、Event、信号量、进程间通讯

本节内容:

异常处理、Socket语法、SocketServer实现多并发、进程和线程、线程锁、GIL、Event、信号量、进程间通讯、生产者消费者模型、队列Queue、multiprocess实例

异常处理、红绿灯、吃包子实例

一:异常处理:

异常是因为程序出现了错误而在正常的控制流以为采取的行为,当python检测到一个异常的时候,解释器就会支出当前流已经无法继续下去,这时候就出现了异常,从python 1.5开始,所有的标准异常都是实用类实现的, Python的异常处理能力是很强大的,可向用户准确反馈出错信息。在Python中,异常也是对象,可对它进行操作。所有异常都是基类Exception的成员。所有异常都从基类Exception继承,而且都在exceptions模块中定义。Python自动将所有异常名称放在内建命名空间中,所以程序不必导入exceptions模块即可使用异常。一旦引发而且没有捕捉SystemExit异常,程序执行就会终止。如果交互式会话遇到一个未被捕捉的SystemExit异常,会话就会终止。

while True:
    try: #正常执行的代码
        a = input("num1:")
        b = input("num2:")
        c = range(10)

        num1 = int(a)
        num2 = int(b)
        result = num1 + num2
        print(c[11])
    except ValueError as e: #执行捕获的异常名称 ValueError,并将抛出的错误信息保存到e以备调用:
        print("ValueError:",e)
    except IndentationError as e:
        print("index error:",2)
    except IndexError as e:
        print(c[4])
    except KeyboardInterrupt as e:
        print("ctrl + c")
    except Exception as e:
        print("捕获到为止异常:")
        print(e)
    finally:
        print("xxxx")

自定义异常和断言:

断言:assert  必须满足的条件,满足继续向下,不满足跳出,和if ---> else语句有点相似:

while True:
    try:
        a = input("num1:")
        b = input("num2:")
        c = range(10)

        num1 = int(a)
        num2 = int(b)
        assert  num1 > num2  #必须满足的条件,满足继续向下,不满足跳出
        result = num1 + num2
        print(result)
        print(c[4])
    except ValueError as e: #值错误
        print("ValueError:",e)
    except IndexError as e: #索引错误,可以更换索引
        print(c[4])
    except KeyboardInterrupt as e: #
        print("ctrl + c")

    except Exception as e:
        print("捕获除ctrl+c/语法错误/等特殊异常以外的所有异常:")
        print(e)
    else:
        print("没有出现异常即代码执行成功3才执行")
    finally:
        print("不管有没有异常都执行")

 举几个小例子,看一下异常捕获怎么使用的:

#/usr/bin/env  python
# -*- coding:utf-8 -*-

str_input = 'jack'
number = int(str_input)
print(number)

执行结果:
Traceback (most recent call last):
  File "C:/Users/zhang/PycharmProjects/S12-python3/day8/test/test.py", line 5, in <module>
    number = int(str_input)
ValueError: invalid literal for int() with base 10: 'jack'
未使用异常捕获举例:
try:
    str_input = 'jack'
    number = int(str_input)
    print(number)
except Exception as e:
    print("