python 3.x 学习笔记12 (反射 and 异常)

1.反射
通过字符串映射或修改程序运行时的状态、属性、方法

getattr(obj,name_str):  根据字符串name_str去获取obj对象里的对应的方法的内存地址

hasttr(obj,name_str):    判断一个对象obj里是否有对应的字符串的方法

setattr(obj,‘y‘,z):              setattr 函数对应函数 getatt(),用于设置属性值,该属性必须存在。

delattr(obj,‘y‘):                 从给定的对象中删除命名的属性

class Dog(object):

    def __init__(self,name):
        self.name = name

    def eat(self):
        print(‘%s is eating ....‘%self.name)

d = Dog(‘xiaohei‘)                     #实例化对象
choice = input(‘>>>>:‘).strip()      #strip()去除左右空格

if hasattr(d,choice):                #检查实例化d中有没有choice
    func = getattr(d,choice)         #getattr返回d中的choice的内存地址
    func()                            #执行函数

2.异常基础

在编程过程中为了增加友好性,在程序出现bug时一般不会将错误信息显示给用户,而是现实一个提示的页面,通俗来说就是不让用户看见大黄页。

1)基本结构

try:
  pass
except Exception as e:
  pass

2)其他结构

#异常结构
try:
    # 主代码块
    pass
except KeyError as e:
    # 异常时,执行该块
    pass
else:
    # 主代码块执行完,即不异常,执行该块
    pass
finally:
    # 无论异常与否,都执行该块
    pass

3)主动触发异常

try:
    raise Exception(‘错误...‘)
except Exception as e:
    print(e)

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

原文地址:https://www.cnblogs.com/hsj-jingyu/p/8424532.html

时间: 2024-10-14 10:42:41

python 3.x 学习笔记12 (反射 and 异常)的相关文章

<<Python基础教程>>学习笔记 | 第08章 | 异常

------ 什么是异常:Python用异常对象(exception object)来表示异常情况.如果异常信息未被处理或捕捉. 程序就会用回潄来终止执行 >>> 1/0 Traceback (most recent call last): #Traceback: 一种错误信息 File "<stdin>", line 1, in ? ZeroDivisionError: integer division or modulo by zero 每个异常都是一

python基础教程_学习笔记12:充电时刻——模块

充电时刻--模块 python的标准安装包括一组模块,称为标准库. 模块 >>> import math >>> math.sin(0) 0.0 模块是程序 任何python程序都可以作为模块导入. $ cat hello.py #!/usr/bin/python print "Hello,signjing!" $ ./hello.py Hello,signjing! 假设将python程序保存在/home/ggz2/magiccube/mysh/p

python 学习笔记 12 -- 写一个脚本获取城市天气信息

最近在玩树莓派,前面写过一篇在树莓派上使用1602液晶显示屏,那么能够显示后最重要的就是显示什么的问题了.最容易想到的就是显示时间啊,CPU利用率啊,IP地址之类的.那么我觉得呢,如果能够显示当前时间.温度也是甚好的,作为一个桌面小时钟还是很精致的. 1. 目前有哪些工具 目前比较好用的应该是 weather-util, 之前我获取天气信息一般都是通过它. 使用起来也很简单: (1) Debian/Ubuntu 用户使用 sudo apt-get install weather-util 安装

python网络爬虫学习笔记

python网络爬虫学习笔记 By 钟桓 9月 4 2014 更新日期:9月 4 2014 文章目录 1. 介绍: 2. 从简单语句中开始: 3. 传送数据给服务器 4. HTTP头-描述数据的数据 5. 异常 5.0.1. URLError 5.0.2. HTTPError 5.0.3. 处理异常 5.0.4. info和geturl 6. Opener和Handler 7. Basic Authentication 8. 代理 9. Timeout 设置 10. Cookie 11. Deb

Swift学习笔记(12)--数组和字典的复制

Swift中,数组Array和字典Dictionary是用结构来实现的,但是数组与字典和其它结构在进行赋值或者作为参数传递给函数的时候有一些不同. 并且数组和字典的这些操作,又与Foundation中的NSArray和NSDictionary不同,它们是用类来实现的. 注意:下面的小节将会介绍数组,字典,字符串等的复制操作.这些复制操作看起来都已经发生,但是Swift只会在确实需要复制的时候才会完整复制,从而达到最优的性能. 字典的赋值和复制操作 每次将一个字典Dictionary类型赋值给一个

python数据分析入门学习笔记儿

学习利用python进行数据分析的笔记儿&下星期二内部交流会要讲的内容,一并分享给大家.博主粗心大意,有什么不对的地方欢迎指正~还有许多尚待完善的地方,待我一边学习一边完善~ 前言:各种和数据分析相关python库的介绍(前言1~4摘抄自<利用python进行数据分析>) 1.Numpy: Numpy是python科学计算的基础包,它提供以下功能(不限于此): (1)快速高效的多维数组对象naarray (2)用于对数组执行元素级计算以及直接对数组执行数学运算的函数 (3)用于读写硬盘

[原创]java WEB学习笔记12:一个简单的serlet连接数据库实验

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------

&lt;&lt;Python基础教程&gt;&gt;学习笔记之|第01章|基础知识

本学习笔记主要用要记录下学习<<Python基础教程>>过程中的一些Key Point,或自己没怎么搞明白的内容,可能有点杂乱,但比较实用,查找起来也方便. 第01章:基础知识 ------ Jython:      Python的Java实现,运行在JVM中,相对稳定,但落后于Python,当前版本2.5,在TA(Python+Robot)会用到 IronPython:  Python的C#实现,运行在Common Language Runtime,速度比Python要快 >

Python高级特性——学习笔记

Python中非常有用的高级特性,1行代码能实现的功能,决不写5行代码.请始终牢记,代码越少,开发效率越高. 1.切片slice.L = [1, 2, 3, 4, 5] L[0:3]=[1,2,3]表示,从索引0开始取,直到索引3为止,但不包括索引3.即索引0,1,2,正好是3个元素. 如果第一个索引是0,还可以省略 倒数切片L[-2:]=[4,5]从倒数第二个数 到 最后一个数 L = list(range(100))# 创建一个0-99的数列L L[:10:2]# 前10个数,每两个取一个