判断类与对象关系

isinstance #判断对象obj是否是由cls类创建的

class Foo(object):
pass
obj = Foo()
print isinstance(obj,Foo)
##如果对象是由类创建,则返回True,不是则返回False
issubclass检查某类类是否是 某类的派生类
class Foo(object):
pass
class Boo(Foo):
pass
print issubclass(Boo,Foo) ##检查Boo类是否是 Foo类的派生类,如果是的话返回True,否则返回False

异常处理

在编程过程中为了增加友好性,在程序出现bug时一般不会将错误信息显示给用户,而是现实一个提示的页面

举个简单例子:

#不使用异常处理
name = 'dicky'
number = int(name)
print number
'''
结果
Traceback (most recent call last):
File "H:/mywork/test/yichang/yichang.py", line , in <module>
number = int(name)
ValueError: invalid literal for int() with base : 'dicky
''' #使用异常处理
name = 'dicky'
try:
number = int(name)
except Exception,e:
print e '''
结果
invalid literal for int() with base : 'dicky'
'''

二、异常处理基础

异常处理的一些解释

 try:
#正常逻辑代码处理
name = raw_input('请输入:')
number = int(name)
except Exception,e:
print e
'''
这个e是对象Exception类创建的!Exception这里面封装了你上面逻辑块出现问题的所有错误,逻辑代码出现错误,这里的代码块就是如果上面的代码出现问题之后执行这个代码块的内容
'''

三、异常处理种类

 常见异常情况
AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
IOError 输入/输出异常;基本上是无法打开文件
ImportError 无法引入模块或包;基本上是路径问题或名称错误
IndentationError 语法错误(的子类) ;代码没有正确对齐
IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[]
KeyError 试图访问字典里不存在的键
KeyboardInterrupt Ctrl+C被按下
NameError 使用一个还未被赋予对象的变量
SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
TypeError 传入对象类型与要求的不符合
UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
导致你以为正在访问它
ValueError 传入一个调用者不期望的值,即使值的类型是正确的
 更多其他异常
ArithmeticError
AssertionError
AttributeError
BaseException
BufferError
BytesWarning
DeprecationWarning
EnvironmentError
EOFError
Exception
FloatingPointError
FutureWarning
GeneratorExit
ImportError
ImportWarning
IndentationError
IndexError
IOError
KeyboardInterrupt
KeyError
LookupError
MemoryError
NameError
NotImplementedError
OSError
OverflowError
PendingDeprecationWarning
ReferenceError
RuntimeError
RuntimeWarning
StandardError
StopIteration
SyntaxError
SyntaxWarning
SystemError
SystemExit
TabError
TypeError
UnboundLocalError
UnicodeDecodeError
UnicodeEncodeError
UnicodeError
UnicodeTranslateError
UnicodeWarning
UserWarning
ValueError
Warning
ZeroDivisionError

举例:

 li = [,,]
try:
li[]
except IndexError,e:
print e
#结果list index out of range

异常情况分析,考虑所有可能出现的异常,异常的一般结构

 try:
pass
except KeyError,e: #指定一个异常
pass
except IndexError,e:
pass
except Exception,e: #万能异常,能够处理所以异常情况
pass
else: #当没有任何异常的时候执行else
pass
finally: #不管上面是否出现异常,最后执行完之后,这里永远执行!finally什么时候用?你上面执行一个操作,连接数据库,我这里就可以执行,断开数据库释放资源!
pass

四主动触发异常

比如我现在有一个连接数据库的模块,如果无法连接数据库的时候,这个会影响我剩下所有代码的进行,这时我需要主动去触发一个异常!

 def connect():
return False #无法连接数据库报错(假设无法连接数据库返回False)
 #!/usr/bin/env python
#-*- coding:utf- -*- import model if __name__ == '__main__':
try:
result = model.connect()
if result:
print "\033[32;1m连接成功\033[0m"
else:
raise Exception('\033[31;1m无法连接数据库\033[0m')#无法连接的时候主动触发一个异常,这个异常的明细,是我自己来指定的
except Exception,e:
print e #使用raise来主动触发异常

五 自定义异常

异常原理解析

 try:
#正常逻辑代码处理
name = raw_input('请输入:')
number = int(name)
except Exception,e:
print e
'''
这个e是对象,由Exception类创建的!Exception这里面封装了你上面逻辑块出现问题的所有错误,逻辑代码出现错误,这里的代码块就是如果上面的代码出现问题之后执行这个代码块的内容 通过上面的例子我们知道,e是由类Execption创建的,print e也就是打印了对象,以前我们知道print 一个对象输出__str__的内容,所以这里也就是输出了Exception类的__str__方法的内容。
知道了这一点也就好自己定义异常了。

简单的自定义异常

 class expect_error(Exception):
def __str__(self):
return "expect_error" try:
raise expect_error
except Exception,e:
print e

六 断言

assert  ==   #如果条件满足就不报错,如果条件不满足就会报错

assert  ==  

'''
这个和 raise Exception('string') 只要你定义了raise肯定会报错
这个一般什么时候使用,比如我写了一个软件,上面有些条款:
你必须接受,你不接受我就不让你用!
'''

七 反射

python中的反射功能主要是由下面四个内置函数来提供,hasattr、getattr、setattr、delattr,这四个函数分别用于对对象内部执行:检查是否含有某成员、获取成员、设置成员、删除成员。

 class Person(object):
def __init__(self,age):
self.age = age
def func(self):
return 'func' obj = Person('')
##检查是否含有成员####
hasattr(obj,'age')
hasattr(obj,'func')
##获取成员###
getattr(obj,'age')
getattr(obj,'func')
##设置成员#####
setattr(obj,'age','')
setattr(obj,'show',lambda m:m+)
##删除成员###
delattr(obj,'age')
delattr(obj,'show')

python之旅第八篇--异常的更多相关文章

  1. Python开发【第八篇】:网络编程 Socket

    Socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. sock ...

  2. Python开发【第八篇】:网络编程

    Python之路[第六篇]:socket   Socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字&quo ...

  3. Python学习第十八篇——低耦合函数设计思想

    import json 2 def greet_user(filename): 3 try: 4 with open(filename) as f_obj: 5 username = json.loa ...

  4. Python进阶【第八篇】迭代器和生成器

    一.何谓迭代 如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration).迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代 ...

  5. python之旅【第二篇】

    1,文件操作 找到文件-----打开文件------文件操作-----------文件关闭 file_open = file(文件路径,模式) 读取文件: M.read() obj = M.readl ...

  6. python之旅【第一篇】

    python简介 python的起源 追溯Python语言的起源,是从20世纪90年代初由Guido van Rossum,在阿姆斯特丹,开发一个新的脚本解释程序.不知道Guido当初有没有想到,Py ...

  7. Python 基础【第八篇】变量

    1.变量定义: 给数据进行命名,数据的名字就叫做变量 2.变量格式: [变量名] = [值] 注:变量名命名需要满足下面两条准则 准则一:标示符开头不能为数字.不能包含空格.特殊字符准则二:标示符不能 ...

  8. python【第十八篇】Django基础

    1.什么是Django? Django是一个Python写成的开源Web应用框架.python流行的web框架还有很多,如tornado.flask.web.py等.django采用了MVC的框架模式 ...

  9. Python之路(第八篇)Python内置函数、zip()、max()、min()

    一.python内置函数 abs() 求绝对值 例子 print(abs(-2)) all() 把序列中每一个元素做布尔运算,如果全部都是true,就返回true, 但是如果是空字符串.空列表也返回t ...

随机推荐

  1. vue项目使用echarts按需引入实现地图动态显示效果时,报错:TypeError: Cannot read property 'dataToPoint' of undefined

    vue项目使用echarts按需引入实现地图动态显示效果时,报错:TypeError: Cannot read property 'dataToPoint' of undefined 借鉴了该大神的文 ...

  2. 使用Python的http.server实现一个简易的Web Api对外提供HanLP拼音转换服务

    由于采集省市区镇数据需要对地名进行拼音转换,由于第三方高准确度接口对IP进行了限制,处理大量数据变得异常缓慢. 使用了一个折中的办法,省市区 3级(3千+)用高准确度接口(几乎没有拼错的地名),镇级( ...

  3. 微信小程序支付异常:requestPayment:fail no permission

    今天在调试微信小程序支付时碰到了这个问题,支付参数都正常生成了,在调用 wx.requestPayment 进行支付时遇到了这个报错,查了一下发现是开发者工具中 AppID 写错了,用的 AppID ...

  4. Redis系列文章总结:ASP.Net Core 中如何借助CSRedis实现一个安全高效的分布式锁

    引言:最近回头看了看开发的.Net Core 2.1项目的复盘总结,其中在多处用到Redis实现的分布式锁,虽然在OnResultExecuting方法中做了防止死锁的处理,但在某些场景下还是会发生死 ...

  5. Windows Community Toolkit 4.0 - DataGrid - Part02

    概述 在上面一篇 Windows Community Toolkit 4.0 - DataGrid - Part01 中,我们针对 DataGrid 控件的 CollectionView 部分做了详细 ...

  6. JS 异步系列 —— Promise 札记

    Promise 研究 Promise 的动机大体有以下几点: 对其 api 的不熟悉以及对实现机制的好奇; 很多库(比如 fetch)是基于 Promise 封装的,那么要了解这些库的前置条件得先熟悉 ...

  7. 比较ASP.NET和ASP.NET Core[经典 Asp.Net v和 Asp.Net Core (Asp.Net Core MVC)]

    ASP.NET Core是.与.Net Core FrameWork一起发布的ASP.NET 新版本,最初被称为ASP.NET vNext,有一系列的命名变化,ASP.NET 5.0,ASP.NET ...

  8. 使用publisher模式控制频繁的UI输出,避免Winform界面假死

    http://www.cnblogs.com/Charltsing/p/publisher.html 最近测试task并发任务的效率与线程池的区别,发现了另外一个问题.task建立任务的速度很快,输出 ...

  9. Django 组件之 ----- content-type

    Django 组件之 content-type的使用 一个表和多个表进行关联,但具体随着业务的加深,表不断的增加,关联的数量不断的增加,怎么通过一开始通过表的设计后,不在后期在修改表,彻底的解决这个问 ...

  10. 3proxy.cfg 配置文件解析

    最新配置文件的man文档所在位置: /程序目录/doc/html/man3/3proxy.cfg.3.html 官网: https://3proxy.ru/ Download 3proxy tiny ...