如何添加异常处理
时间: 2023-07-05 19:21:36 浏览: 100
在代码中添加异常处理可以保证程序在运行过程中出现问题时,不会直接崩溃。对于 socket 相关操作,可以使用 try-except 语句捕获异常并进行处理。
例如,在接收数据时,可以使用以下代码:
```
try:
data = client.recv(1024) # 接收服务端返回的内容
if len(str(data, 'utf-8').split('|')) == 2: # 如果返回的字符串长度为2,说明针对的任务2,从服务端传回一张图片
filename, filesize = str(data, 'utf8').split('|') # 获得指定图像的名称,图像大小
path = os.path.join(BASE_DIR, filename) # 指定图像的保存路径
filesize = int(filesize) # 图像大小转换成整形
f = open(path, 'ab') # 以二进制格式打开一个文件用于追加。如果该文件不存在,创建新文件进行写入。
has_receive = 0 # 统计接收到的字节数
while has_receive != filesize:
data1 = client.recv(1024) # 一次从服务端接收1024字节的数据
f.write(data1) # 写入
has_receive += len(data1) # 更新接收到的字节数
f.close() # 关闭文件
print("recv:", data.decode())
except Exception as e:
print("接收数据时发生错误:", str(e))
```
在发送和接收数据时添加超时机制也可以避免程序阻塞。例如,在接收数据时可以使用以下代码:
```
client.settimeout(5) # 设置超时时间为5秒
try:
data = client.recv(1024) # 接收服务端返回的内容
if len(str(data, 'utf-8').split('|')) == 2: # 如果返回的字符串长度为2,说明针对的任务2,从服务端传回一张图片
filename, filesize = str(data, 'utf8').split('|') # 获得指定图像的名称,图像大小
path = os.path.join(BASE_DIR, filename) # 指定图像的保存路径
filesize = int(filesize) # 图像大小转换成整形
f = open(path, 'ab') # 以二进制格式打开一个文件用于追加。如果该文件不存在,创建新文件进行写入。
has_receive = 0 # 统计接收到的字节数
while has_receive != filesize:
data1 = client.recv(1024) # 一次从服务端接收1024字节的数据
f.write(data1) # 写入
has_receive += len(data1) # 更新接收到的字节数
f.close() # 关闭文件
print("recv:", data.decode())
except socket.timeout:
print("接收数据超时")
except Exception as e:
print("接收数据时发生错误:", str(e))
```
阅读全文