Python开发之路(八)

一、异常处理

try和except

释义:

    try是让程序先试着执行try下的代码,如果不报错就走这条;

    except是一旦try下的代码在执行过程中报错,就走except这条。

例如一段代码:

try:
    print(11111)
    # l = []
    # l[2]
    int('a')
    print(222222)
except Exception as e:print(e)

11111是打印的,但执行到int('a')就会报错,那么此时就走except,打印报错信息。


finally用法:finally是一定会执行的代码

try:
    print(11111)
    # l = []
    # l[2]
    int('a')
    print(222222)
except Exception as e:print(e)
else:
    print('执行else')        # 如果try语句中的代码都顺利执行了,没有报错,那么执行else的代码
finally:print('执行finally') # 不管前面的代码,finally一定会执行


总结:

try:
    pass # 可能有问题的代码
except ValueError: pass# 能预料到的错误
except Exception as e:print(e)  # 能处理所有的异常
else:pass   # try中的代码没有错误的时候,执行的
finally:pass    # 无论如何都会执行的
raise ValueError # 主动抛出异常


二、包

释义:一组py文件组成的文件夹,在这个文件夹里有一个__init__.py文件,这就是包。

__init__.py有什么用?

其实在调用一个模块时,就是调用了这个模块名的py文件,每个py文件下都有一个__init__.py文件,这是做什么用的呢?我们在调用这个模块前,首先调用的就是__init__.py文件,先执行他,然后再执行 模块名.py文件。

注:绝对导入和相对导入

带有相对导入路径的文件不能直接执行,因为不添加环境变量,代码执行会报错找不到这个模块或包,


三、网络编程

(下篇文章主要讲并发编程,这里对于1对1通信的网络编程,只记录模板并释义)

首先我们要导入一个socket模块

server端:

import socket
# 买一个手机
phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 给手机插卡
phone.bind(('127.0.0.1',8080))
# 手机开机,等电话
phone.listen(5)
# 建立通话链接
conn,client_addr=phone.accept()
# 收发通信数据
client_data = conn.recv(1024)
print(client_data.decode('utf-8'))
conn.send(client_data.upper())
# 挂电话,手机关机
conn.close()
phone.close()

client端:

import socket
# 手上有一个手机
phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 拿手机给对方拨号
phone.connect(('127.0.0.1',8080))
# 发送数据
phone.send('hello'.encode('utf-8'))
# 接收数据
server_data = phone.recv(1024)
# 数据处理
print(server_data.decode('utf-8'))
# 挂电话,关机
phone.close()


粘包问题:

粘包问题只发生在tcp协议下,而不发生在udp协议下。

在什么情况下会发生粘包?

在基于tcp通信,并连续发送两条数据是“可能”发生,即两条变一条发送过去了,并且发生粘包的条件是对端在接收数据时,接收bytes限制大于发送数据量。

如何避免粘包情况发生呢?

先制作报头,先发报头,对端准确无误接收报头,再发送数据。

你可能感兴趣的:(Python开发之路)