本节内容:
异常处理、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("