一、报错后的解决方法:
报错如何解决:
try:
print(111)
l = []
l[2]
int('a')
print(222)
except ValueError:
print('报错了')
except IndexError:
print('baocuole')
结果:
111
baocuole
try:
print(111)
l = []
l[2]
int('a')
print(222)
except ValueError as e :print(e)
except IndexError :print('索引不存在')#list index out of range
报错解决:
总结:try
excpet
except as
找到一个满足条件的其他分支都不走了
预料不到的是万能异常:
try:
print(111)
l = []
l[2]
int('a')
print(222)
except:
print('出错了')
第二种写法:
缺点:不知道那里出问题了可以加上as 推荐使用
try:
print(111)
l = []
l[2]
int('a')
print(222)
except Exception as e :
print(e) #list index out of range
具体的异常处理+万能的异常:
#能够提前预料到的异常都应该具体的异常处理, 剩下的其他异常用万能异常控制
#万能异常应该卸载最后
except和else是互斥的如果执行了except那么else将不执行
try:
l = [1]
num = int(input('num:'))
l[num]
except ValueError:print('请输入一个数字')
except IndexError:print('您要找的项目不存在')
except Exception as e :print(e) #万能异常要写在最下面
else:
print('执行else了')#num:0
#执行else了
#如果执行try中的代码没有报错,那么就执行else中的代码了
例如发邮件成功之后
def func():
try:
f = open('aaa','w')
ret = f.read()
return ret
except:
print('error')
finally:
f.close()
finally优先级高于return一定会关闭,多用于关闭程序减轻内存
Raise 主动抛异常
不常用,这个方法
Raise ValueError
断言:
assert 1 ==2 # if条件判断
类似 if not 1==2:exit()
assert 1==2
# assert 1==2 如果是1==1就可以了
#AssertionError
总结:
try except else finally
raise 错误类型 自定义异常 自定义一个类继承BaseExecption
断言 看源码
二、模块的使用和定义:
定义:就是py文件的导入 import 导入就能用的
导入模块:
起一个别名:
从一个模块同时导入多个模块:
导入所有的
*和 __all__联合使用的,比如不想让使用某个功能,all中的是可以使用的
总结:
From import
任然会执行行整个文件
文件中的名字会被存储在一块独立的内存空间中
Import 后面的名字会出现在全局
相当于对独立命名空间中的一个引用
From import也支持as 导入多个名字
From import * 相当于导入所有名字 *和__all__配合使用是互相影响的
三、包的定义和使用:
一组py文件组成的文件夹,在这个文件夹里有一个__init__.py的包
四、网络编程:
服务器端
import socket
sk = socket.socket() #买手机
sk.bind(('198.9.6.115',9000))#安装电话卡
sk.listen()#开机
conn,addr = sk.accept() # 等待来电话
conn.send(b'hello') #说了一句话hello
conn.close() # 挂断电话
sk.close() # 关机
客户端
import socket
sk = socket.socket()
sk.connect(('198.9.6.115',9000))
print(sk.recv(1024)) #接受一个数据大小
sk.close()
双向发送和接收
Server端:
import socket
sk = socket.socket() #买手机
sk.bind(('198.9.6.115',9000))#安装电话卡
sk.listen()#开机
conn,addr = sk.accept() # 等待来电话
conn.send(b'hello\n world') #说了一句话hello
print(conn.recv(1024)) #接受
conn.close() # 挂断电话
sk.close() # 关机
Client端:
import socket
sk = socket.socket()
sk.connect(('198.9.6.115',9000))
print(sk.recv(1024)) #接受一个数据大小
sk.send(b'bye') # 发送
sk.close()
服务端:
import socket
sk = socket.socket() #买手机
sk.bind(('198.9.6.115',9000))#安装电话卡
sk.listen()#开机
conn,addr = sk.accept() # 等待来电话 三次握手
while True:
msg = input('>>>')
conn.send(msg.encode('utf-8')) #说了一句话hello
if msg =='q':break
ret = conn.recv(1024).decode('utf-8')
if ret =='q':break
print(ret)
conn.close() # 挂断电话
sk.close() # 关机
客户端:
import socket
sk = socket.socket()
sk.connect(('198.9.6.115',9000))
while True:
ret = sk.recv(1024).decode('utf-8')#接受一个数据大小
if ret =='q':break
print(ret)
msg = input('>>>')
sk.send(msg.encode('utf-8')) # 发送
if msg =='q':break
sk.close()
如果要和另外一个聊就需要在家一个while True在服务端
Server端:
import socket
sk = socket.socket() #买手机
sk.bind(('198.9.6.115',9001))#安装电话卡
sk.listen()#开机
while True:
conn,addr = sk.accept() # 等待来电话 三次握手
while True:
msg = input('>>>')
conn.send(msg.encode('utf-8')) #说了一句话hello
if msg =='q':break
ret = conn.recv(1024).decode('utf-8')
if ret =='q':break
print(ret)
conn.close() # 挂断电话
sk.close() # 关机
客户端:
import socket
sk = socket.socket()
sk.connect(('198.9.6.115',9001))
while True:
ret = sk.recv(1024).decode('utf-8')#接受一个数据大小
if ret =='q':break
print(ret)
msg = input('>>>')
sk.send(msg.encode('utf-8')) # 发送
if msg =='q':break
sk.close()
UDP的连接:
最简单的
Server端:
import socket
sk=socket.socket(type=socket.SOCK_DGRAM)
sk.bind(('127.0.0.1',8899))
msg,addr = sk.recvfrom(1024)
print(msg)
sk.close()
Client端:
import socket
sk = socket.socket(type=socket.SOCK_DGRAM)
sk.sendto(b'hello',('127.0.0.1',8899))
sk.close()
服务器:
import socket
sk = socket.socket(type=socket.SOCK_DGRAM)
sk.bind(('127.0.0.1',8898))
msg,addr = sk.recvfrom(1024)
sk.sendto(b'byebye',addr)
print(msg)
sk.close()
客户端:
import socket
sk = socket.socket(type=socket.SOCK_DGRAM)
sk.sendto(b'hello',('127.0.0.1',8898))
msg,addr = sk.recvfrom(1024)
print(msg)
sk.close()
Input:
Server
粘包:
只会发生在TCP协议中
原文地址:http://blog.51cto.com/xiaorenwutest/2121956