反射

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

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. Silverlight之控件应用总结(二)(4)

    [置顶] Silverlight之控件应用总结(二)(4) 分类: 技术2012-04-03 22:12 846人阅读 评论(0) 收藏 举报 silverlightradiobuttonhyperl ...

  2. 两道NOIP里的DP题目~

    拦截导弹    来源:NOIP1999(提高组) 第一题 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都 ...

  3. 【USACO 2010FEB】 slowdown

    [题目链接] 点击打开链接 [算法] dfs序 + 线段树 树链剖分同样可以解决这个问题 [代码] #include<bits/stdc++.h> using namespace std; ...

  4. bzoj4031 [HEOI2015]小Z的房间——矩阵树定理

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4031 矩阵树定理的模板题(第一次的矩阵树定理~): 有点细节,放在注释里了. 代码如下: # ...

  5. 聚类-----KMeans

    package Spark_MLlib import org.apache.spark.ml.clustering.KMeans import org.apache.spark.sql.SparkSe ...

  6. 6. extjs panel layoutconfig属性

    转自:https://blog.csdn.net/xingtianyiyun/article/details/7686811 layoutConfig: Object 这是一个包含指定布局详细属性的对 ...

  7. KeepAlived的介绍

    KeepAlived介绍 keepalived keepalived是一个类似于layer3, 4 & 7交换机制的软件,也就是我们平时说的第3层.第4层和第7层交换. Keepalived的 ...

  8. 洛谷 P1233 木棍加工

    题目描述 一堆木头棍子共有n根,每根棍子的长度和宽度都是已知的.棍子可以被一台机器一个接一个地加工.机器处理一根棍子之前需要准备时间.准备时间是这样定义的: 第一根棍子的准备时间为1分钟: 如果刚处理 ...

  9. Jsp四个作用域page、request、session和application的区别

    1.简单说 page指当前页面.在一个jsp页面里有效  2.request 指从http请求到服务器处理结束,返回响应的整个过程.在这个过程中使用forward方式跳转多个jsp.在这些页面里你都可 ...

  10. c++类的内存布局

    问题: 考察了reinterpret_cast和static_cast的区别.顺道发现了一个可以查看c++内存布局的工具(在VS中). 结果: 前两个输出的地址形同,后一个不同. class A{in ...