反射

:字符串到对象属性的映射

hasattr(obj,string),
判断对象obj里面是否有叫string的字段或方法
getattr(obj,string)
获取obj对象里名叫string的字段或方法(如果重名先找字段)
setattr(obj,y,v)
设置属性或者方法obj.y = v
delattr(obj,y)
删除属性obj.y

class Dog(object):
def __init__(self,name):
self.name = name
def eat(self):
print("%s is eating"%self.name) d = Dog("labuladuo")
choice = input(">>").strip()
#用户输入什么调用什么方法,用反射 def bulk(self):
print("%s is bulking"%self.name) if hasattr(d,choice):
func = getattr(d,choice)
func()
#删除属性
delattr(d,choice)
else:
#动态添加一个方法d.choice = bulk
setattr(d,choice,bulk)
d.bulk(d)
#动态添加一个属性,如果该属性存在会报错
setattr(d,choice,None)
print(getattr(d,choice))

反射为什么重要?
动态的实现内存装配,通过字符串反射到内存对象,不用写一大堆if..else判断用户输入什么调用什么方法了,直接用反射

异常处理

Python中有很多异常,有的异常不能通过编译,例如:indentationError 这个不能catch

低级版:抓住全部错误。不要这样用,自己搞着玩可以

try:
names[3]
data["name"]
except Exception as e:
print("出错:",e)

正常版:预料一些错误。一般的使用方式

try:
names[3]
data["name"]
except KeyError as e:
print("没有该key",e)
except IndexError as e:
print(e)

正常版低级形态:不知道是哪句代码出错,可以统一处理

try:
names[3]
data["name"]
except (KeyError,IndexError) as e:
print("错误",e)

终极出错大套餐:基本考虑各种情况,但是Exception不能catch缩进异常

try:
names[3]
data["name"]
open("aa.txt")
except KeyError as e:
print("没有该key",e)
except IndexError as e:
print("下标越界",e)
except Exception as e:
print("未知错误:",e)
else:
print("一切正常")
finally:
print("不管有没有错,都执行")

自定义异常,例如别人调你的接口,别人触发你定义的异常

Python反射、异常处理的更多相关文章

  1. python 反射

    python 反射的核心本质其实就是利用字符串的形式去对象(模块)中操作(查找/获取/删除/添加)成员,一种基于字符串的事件驱动! 反射的四个基本函数使用 hasattr,getattr,setatt ...

  2. python反射

    python反射 python的反射是基于字符串的形式去对象(模块)中操作其成员.此操作是动态的,常用于web开发中url参数中对应模块或者函数的反射. 下面开始具体说明: 场景需求: 我的pytho ...

  3. Python反射机制理解

    Python反射机制用沛齐老师总结的话说就是:利用字符串的形式去对象(模块)中操作(寻找)成员. getattr(object, name) object代表模块,name代表模块中的属性或成员,该函 ...

  4. python的异常处理及异常类定义

    python的异常处理语法和大多数语言相似: try: try块的语句... except exceptiontype1 as var:#使用as语句获得本次捕获到的异常的实例var except块语 ...

  5. 小学生绞尽脑汁也学不会的python(反射)

    小学生绞尽脑汁也学不会的python(反射) 1. issubclass, type, isinstance issubclass 判断xxxx类是否是xxxx类的子类 type 给出xxx的数据类型 ...

  6. Python进阶----异常处理

    Python进阶----异常处理 一丶错误和异常   错误:       语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正) #语法错误示范一 if #语法错误示范二 ...

  7. Python反射和内置方法(双下方法)

    Python反射和内置方法(双下方法) 一.反射 什么是反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发 ...

  8. python的异常处理机制

    异常机制己经成为衡量一门编程语言是否成熟的标准之一,使用异常处理机制的 Python 程序有更好的容错性,更加健壮. 对于计算机程序而言,情况就更复杂了一一没有人能保证自己写的程序永远不会出辛苦!就算 ...

  9. Python 多进程异常处理

    前言 最近项目用到了Python作为网站的前端,使用的框架是基于线程池的Cherrypy,但是前端依然有一些比较‘重’的模块.由于python的多线程无法很好的利用多核的性质,所以觉得把这些比较‘重’ ...

随机推荐

  1. Java 基础 —— 注解

    注解(annotation)不是注释(comment): 注解,是一种元数据(metadata),可为我们在代码中添加信息提供了一种形式化的方法.注解在一定程度上实现了元数据和源代码文件的结合,而不是 ...

  2. 24. [Ext JS 4] 实战之Load Mask(加载遮罩)的显示与隐藏

    转自:https://blog.csdn.net/oscar999/article/details/27176791

  3. springboot开发过程中的小坑(持续更新)

    1. 启动的Application必须放到一个package下面,如下: package com.example.kikidemo; import org.springframework.boot.S ...

  4. Controller控制器的使用

    如果不加@Controller注解,浏览器它是无法访问到的.@RequestMapping通过某个URL访问到我们写的方法

  5. POJ 1659 Frogs' Neighborhood (贪心)

    题意:中文题. 析:贪心策略,先让邻居多的选,选的时候也尽量选邻居多的. 代码如下: #pragma comment(linker, "/STACK:1024000000,102400000 ...

  6. Linux 进程间通讯方式 pipe()函数 (转载)

    转自:http://blog.csdn.net/ta893115871/article/details/7478779 Linux 进程间通讯方式有以下几种: 1->管道(pipe)和有名管道( ...

  7. 插入CSS的方法

    传送门    选择器  selector {declaration1; declaration2; ... declarationN }   例:   p { text-aligh:center; } ...

  8. vbnet 进程监控,监控Acad开启的数量,并且添加到开机启动

    1# 自定义函数,添加到注册表 Public Sub StartRunRegHKLM() REM HKEY_LOCAL_MACHINE \ SOFTWARE \ WOW6432Node \ Micro ...

  9. oracle-数据库泵EXPDP导出用户下所有

    1登录sys用户 2创建目录 create directory [dirname] as ‘[dirpath]’; dirname:取的名字 dirpath:dmp文件导出路径 示例:create d ...

  10. I - Andy's First Dictionary(set+stringstream)

    Description Andy, 8, has a dream - he wants to produce his very own dictionary. This is not an easy ...