一、isinstance和issubclass
  • isinstance:判断某个对象是否是某个类的实例,返回True或Flase
  • issubclass:判断某个类是否是某个类的子类。

例如:

class Foo(object):
def __init__(self,name):
self.name = name class bar(Foo):
pass obj=Foo('wd')
print(isinstance(obj,Foo))#判断obj是否是Foo的实例
print(issubclass(bar,Foo))#判断bar是否是Foo的子类
二、动态模块导入

在很多时候,我们编写的一个模块需要动态导入,普通的import已经无法满足我们需求,importlib提供了动态导入模块方法,import_moudule(模块名字),参数为字符串。

import importlib
importlib.import_module('ftp_server')
#__import__('ftp_server') #这是解释器自己内部用的,与上面效果一致
三、try、except异常处理

1.异常处理基础

在coding过程中,运行是或多或少都会出现异常,代码出异常后会自动停止,异常处理显得格外的重要,python中异常处理采用了try和except实现,如果捕捉到了异常代码会继续往下执行而不会报错,基本语法如下:

try:
代码块
except 异常 as e:#将异常取别名为e
pass

例如:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:W-D
try:
my_list=[1,2,3]
my_list[10]=2#没有索引为10的元素,不捕捉异常会报错
except IndexError as e:
print(e)
print('捕捉到异常了')
结果:
list assignment index out of range
捕捉到异常了

 2.一次捕获多个异常

如果代码中需要存在多个异常,捕获多个异常的时候,只要第一个异常捕获到了,try中的代码将不会执行,方法有两种:

  • 多个except
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:W-D
a='wd'
my_list=[1,2,3]
try: my_list[10]=1
int(a) except ValueError as e:
print(e)
print('走到了Value Error')
except IndexError as e:
print(e)
print('走到了Index Error')
#异常不会有顺序,只要第一次的捕获到了,try语句中的代码将不会执行,转而执行except下面代码 结果:

list assignment index out of range
走到了Index Error

  • 一个except中写多个异常。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:W-D
a='wd'
my_list=[1,2,3]
try: my_list[10]=1
int(a) except (ValueError,IndexError) as e:
print(e)
print('走到了这里') #异常不会有顺序,只要第一次的捕获到了,try语句中的代码将不会执行,转而执行except下面代码
结果:
list assignment index out of range
走到了这里

3.捕获绝大多数异常(Execption)

Execption中包含了所有的python中自带的异常,但并不能捕捉类似与语法错误,缩进错误的异常。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:W-D a='wd'
my_list=[1,2,3]
try: my_list[10]=1
int(a) except Exception as e:
print(e)
print('走到了这里')
结果:
list assignment index out of range
走到了这里

4.主动触发异常(raise)

5.自定义异常与异常详情

在进行软件开发的过程中,往往会引入第三方模块,此时的异常并不是标准的异常,所以我们需要自己定义异常,并捕获。

Exception类与BaseException类

Exception类是BaseException类的子类,从源码中可以看到,Exception类中主要有两种方法用于异常处理,即

1.__init__()构造方法,用于实例化异常,参数为获取异常内容。

2.__str__()方法,我们知道该方法一般用于print打印。

6.try,except其他语法结构

try:
# 主代码块
pass
except KeyError,e:
# 异常时,执行该块
pass
else:
# 主代码块执行完,执行该块
pass
finally:
# 无论异常与否,最终执行该块
pass

7.异常处理--断言

assert即断言,也用于异常处理,有些时候在某些特定的场景发挥优雅的作用。

语法:

assert 条件判别式

抛出异常的方法为,条件判别式失败则抛出异常

name='wd'
assert name==''
print('----------end')
结果:
Traceback (most recent call last):
File "F:/FTP/异常处理.py", line 21, in <module>
assert name==''
AssertionError

isinstance和issubclass、动态模块导入、异常处理的更多相关文章

  1. python之路(9)反射、包装类、动态模块导入

    目录 反射 利用继承二次包装标准类 利用授权二次包装标准类 动态模块导入 反射 python提供自省的四个方法: hasattr(object,name)  判断object中有没有有个name字符串 ...

  2. python动态模块导入

    首先创建一个模块目录lib,然后在目录内创建一个模块为:aa.py 官方推荐: import importlib aa = importlib.import_module('lib.aa') c = ...

  3. 面向对象(五)--isinstance与issubclass方法、反射、内置方法(部分)、异常处理

    一.isinstance与issubclass方法 1.isinstance是用来判断对象是否是某个类 isinstance(obj,class) 2.issubclass是用来判断一个类是否为另一个 ...

  4. 接口(Interfaces)与反射(reflection) 如何利用字符串驱动不同的事件 动态地导入函数、模块

    标准库内部如何实现接口的 package main import ( "fmt" "io" "net/http" "os" ...

  5. 绑定与非绑定方法及反射,isinstance和issubclass内置函数

    目录 绑定方法与非绑定方法 1.绑定方法 2.非绑定方法(staticmethod) isinstance和issubclass 内置函数 1.isinstance 2.issubclass 反射(面 ...

  6. isinstance与issubclass,反射

    目录 isinstance与issubclass isinstance issubclass 反射 定义 反射在模块中的应用 内置方法 isinstance与issubclass isinstance ...

  7. python 全栈开发,Day23(复习,isinstance和issubclass,反射)

    一.复习 class A: def func1(self):pass def func2(self): pass def func3(self): pass a = A() b = A() print ...

  8. day17 isinstance type issubclass 反射

    1. issubclass,type,isinstance 1.issubclass 判断xxx是否yyy的子类 例: class Foo: pass class Bar(Foo): pass cla ...

  9. python基础(28):isinstance、issubclass、type、反射

    1. isinstance和issubclass 1.1 isinstance isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(object): pa ...

随机推荐

  1. Head First设计模式之单例模式

    一.定义 保证一个类仅有一个实例,并提供一个访问它的全局访问点.通过单例模式可以保证系统中一个类只有一个实例.即一个类只有一个对象实例. Singleton模式中的实例构造器可以设置为protecte ...

  2. [UWP]如何使用Fluent Design System (上)

    1. 前言 微软在Build 2017中公布了新的设计语言Fluent Design System(以下简称FDS),不过官网只是堆砌了各种华丽的词语以及一堆动画.至于在UWP中要做成怎么样,怎么做, ...

  3. http请求参数中包含特殊字符的严重后果,比如:#

    URL请求中不能包含特殊符号,比如:# 今天在调接口,突然发现接口参数中传递的数据没有完全接收到controller层的model模型中,反反复复测了好几遍,真不信这个邪了,头晕脑胀的时候才关注到UR ...

  4. swift中的AnyHashable

    AnyHashable是调和objc和Swift的产物 典型的场景是,objc下无泛型的NSDictionary到了Swift下,会变成什么?(典型例子是苹果来的推送消息) [Any: Any],这肯 ...

  5. es7 await/async解决异步问题

    最近做项目遇到一个问题,前端调用ie浏览器中的ocx的方法去查询数据,查询完之后ocx给一个返回值,然后js将返回值当参数传入到另外的函数中去做数据处理,但是遇到一个问题是前端需要异步去执行这个过程 ...

  6. 【状压DP】poj3254 Corn Fields

    题意: 一块n*m的田,1表示这个地方可以种植,0代表这个地方不能种植.植物种植还必须满足两株植物不能相邻(横竖都不行).问共有几种种植方法,而且当什么都不种时认为是一种方法. 解题思路: 种植用1表 ...

  7. 如何使用webapi集成swagger

    现在B/S开发中,前后端分离无疑已经成为一种新的时尚,但是如何把后端开发的接口更好的提供给前段开发呢?还用接口文档?low了吧.不仅要花时间开发接口,还得花时间写文档,白花花的时间不久浪费了吗.如果接 ...

  8. python 组合样例

    class Bill(): def __init__(self, description): self.description = description class Tail(): def __in ...

  9. 【三十】php之PDO抽象层

    1.PDO介绍(php data object) PHP 数据对象 (PDO) 扩展为PHP访问数据库定义了一个轻量级的一致接口. PDO 提供了一个数据访问抽象层,这意味着,不管使用哪种数据库,都可 ...

  10. js面向对象学习笔记(二):工厂方式:封装函数

    //工厂方式:封装函数function test(name) { var obj = new Object(); obj.name = name; obj.sayName = function () ...