[Python6]反射_异常处理_Socket网络通信

反射,异常处理,Socket网络通信

反射

  • 反射即为通过字符串映射或修改程序运行时的状态、属性、方法。具体有:getattr,hasatter,setattr,delattr四种方法
  • hasattr(obj,name_str),判断一个对象里是否有对应字符串的方法
  • getattr(obj,name_str,根据字符串去获取obj对象里对应方法的内存地址
  • setattr(obj,name_str,value),为目标对象添加一个新的属性并进行重命名
  • delattr(obj,name_str),为对象删除一个指定的属性或方法
def sleep(self):
    print("%s is sleeping" %self.name)
class Dog(object): #定义一个狗的类
    def __init__(self,name):#构造函数
        self.name = name
    def eat(self,food): #eat方法
        print("%s is eating %d" %(self.name,food))

d1 = Dog("Huihui")#实例化一个狗
choice = input(">>:").strip()#让用户输入要调用的方法,输入eat

if hasattr(d1,choice):#通过反射判断对象是否有该方法
    func = getattr(d1,choice)#反射方法对应的内存地址
    func("meat")#调用该方法
    delattr(d1,choice)#删除该方法
else:
    setattr(d1,choice,sleep)#将sleep方法重命名为输入的名字并加入d1的属性中
    func = getattr(d1,choice)#反射方法获取该方法的内存地址
    func(d1)#调用该方法

异常处理

异常处理代码

  • 所谓异常处理,即当程序出现bug时不会直接崩溃,而是实现一个提示的页面,执行对应出错后的处理步骤,该需求即为异常处理,格式如下:
try: #尝试执行某语句
    pass
except Exception as name: #如果出现某个预知错误,并获取错误信息
    pass
else: #如果都没有错误,执行
    print("All OK")
finally: #不论出不出错都执行
    pass

常用异常种类

  • Exception 可以抓取所有未知错误。
  • AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x。
  • IOError 输入/输出异常;基本上是无法打开文件。
  • ImportError 无法引入模块或包;基本上是路径问题或名称错误。
  • IndentationError 语法错误(的子类) ;代码没有正确对齐。
  • IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]。
  • KeyError 试图访问字典里不存在的键。
  • KeyboardInterrupt Ctrl+C被按下。
  • NameError 使用一个还未被赋予对象的变量。
  • SyntaxError Python代码非法,即语法错误,代码不能编译。
  • TypeError 传入对象类型与要求的不符合。
  • UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它。
  • ValueError 传入一个调用者不期望的值,即使值的类型是正确的。

Socket网络编程

  • socket本质上就是在2台网络互通的电脑之间,架设一个通道,两台电脑通过这个通道来实现数据的互相传递。
  • 网络通信都是基于 ip+port 方能定位到目标的具体机器上的具体服务,操作系统有0-65535个端口,每个端口都可以独立对外提供服务,如果把一个公司比做一台电脑 ,那公司的总机号码就相当于ip地址, 每个员工的分机号就相当于端口, 你想找公司某个人,必须先打电话到总机,然后再转分机 。
  • 建立一个socket必须至少有2端, 一个服务端,一个客户端, 服务端被动等待并接收请求,客户端主动发起请求, 连接建立之后,双方可以互发数据。 具体流程如下:

参考资料:
<http://www.cnblogs.com/wupeiqi/articles/5017742.html >