Python网络编程day-1[异常处理,socket]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python网络编程day-1[异常处理,socket]相关的知识,希望对你有一定的参考价值。

异常处理:

  错误:

    1.语法错误:程序运行检测到语法错误会直接抛出,并终止程序运行。

    2.逻辑错误:程序在运行中遇到逻辑错误,系统会询问程序是否处理异常,程序没有处理系统会抛出异常,并终止程序运行。

  异常:

    程序运行过程中发生的错误。

  异常分为三部分:

    追踪信息,异常类,异常值。

n = input(>>>: ).strip()
s = n + 1
print(s)

执行结果:
D:\\Python\\Python36-32\\python.exe E:/Python/DAY-23/day23.py
>>>: 1
Traceback (most recent call last):
  File "E:/Python/DAY-23/day23.py", line 7, in <module>   <----追踪信息
    s = n + 1
TypeError: must be str, not int
异常类      异常值
Process finished with exit code 1
技术分享
AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
IOError 输入/输出异常;基本上是无法打开文件
ImportError 无法引入模块或包;基本上是路径问题或名称错误
IndentationError 语法错误(的子类) ;代码没有正确对齐
IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError 试图访问字典里不存在的键
KeyboardInterrupt Ctrl+C被按下
NameError 使用一个还未被赋予对象的变量
SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
TypeError 传入对象类型与要求的不符合
UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
导致你以为正在访问它
ValueError 传入一个调用者不期望的值,即使值的类型是正确的
常用异常

  异常的处理方式:

    1.if 处理:错误发生前处理,防止错误发生

    2. try处理:错误发生后处理,捕捉异常进行处理

try的用法:

  当try含多个异常时,当遇到第一个异常就会跳出try内的代码执行,去匹配except的异常处理。

  使用try 和 except  来包裹可能发生错误的代码,使用except 来指定捕捉的 错误类型  如下代码:

try:
    n = input(>>>: ).strip()
    s = n + 1
    print(s)
except TypeError:
    print(-------------)

执行结果:
D:\\Python\\Python36-32\\python.exe E:/Python/DAY-23/day23.py
>>>: 1
-------------

Process finished with exit code 0

支持分支捕捉异常,类似if elif

else:当try内的代码没有异常时则执行 else 后面的命令。

finally:不管try内的代码有没有异常发生都执行

s1 = hello
try:
    int(s1)
except IndexError as e:
    print(e)
except KeyError as e:
    print(e)
except ValueError as e:
    print(e)
#except Exception as e:
#    print(e)
else:
    print(try内代码块没有异常则执行我)
finally:
    print(无论异常与否,都会执行该模块,通常是进行清理工作)

主动抛出异常(raise):

  主动抛出一个指定的类型的错误。

try:
    n = input(>>>: ).strip()
    s = int(n) + 1
    raise TypeError
except TypeError:
    print(----raise 抛出的 Type Error---------)

执行结果:
D:\\Python\\Python36-32\\python.exe E:/Python/DAY-23/day23.py
>>>: 1
----raise 抛出的 Type Error---------

Process finished with exit code 0

自定义异常类:

class LdslyError(BaseException):   #定义错误类型的名字,继承 BaseException
    def __init__(self,msg):
        self.msg=msg

try:
    raise LdslyError(test)
except LdslyError as e:
    print(e)

socket:

  客户端/服务端架构

    即C/S架构。程序分为两部分,客户端和服务端两部分,客户端向服务端发送请求,服务端给客户端回应相应的信息。通过网络来连接客户端和服务端两部分。

  socket在计算机的什么位置:

技术分享

socket的工作流程:

技术分享

  上图 write和read形成的循环,称为通信循环。

一个简单的客户端发送命令,服务端执行命令并返回命令的执行结果:

#服务端
import
socket import subprocess server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #建立服务 server.bind((127.0.0.1,8080)) #监听IP和端口 server.listen(5) print(server run..........) while True: conn,client_addr=server.accept() #等待客户端连接,建立连接对象conn print(client_addr) #打印客户端连接信息 while True: try: client_msg = conn.recv(1024) #接收客户端消息 res = subprocess.Popen(client_msg.decode(utf-8),shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE) stdout = res.stdout.read() stderr = res.stderr.read() conn.sendall(stdout+stderr) print(client_msg.decode(utf-8)) #打印客户端消息 # conn.send(‘hi‘.encode(‘utf-8‘)) #发送给客户端消息 except Exception: break conn.close() #关闭连接 server.close() #关闭服务
#客户端
import socket

client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)   #建立客户端

client.connect((192.168.16.108,8080))   #客户端连接 服务端的ip地址跟端口
while True:
    cmd = input(>>>:).strip()
    if not cmd:break
    client.send(cmd.encode(utf-8))  #向服务端端发送信息

    server_msg = client.recv(1024)   #接受服务端的回复
    print(server_msg.decode(gbk))  #打印服务端信息

client.close()   #关闭连接

 


以上是关于Python网络编程day-1[异常处理,socket]的主要内容,如果未能解决你的问题,请参考以下文章

python学习第31天之异常处理网络编程part1

python:异常处理和网络编程

Python学习笔记八(异常处理和网络编程)

[python]python进阶编程-异常的处理

python异常处理和面向对象编程总结

Python20期课堂总结-20180127day8-异常处理与网络编程