isinstance和issubclass、动态模块导入、异常处理
| 一、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、动态模块导入、异常处理的更多相关文章
- python之路(9)反射、包装类、动态模块导入
目录 反射 利用继承二次包装标准类 利用授权二次包装标准类 动态模块导入 反射 python提供自省的四个方法: hasattr(object,name) 判断object中有没有有个name字符串 ...
- python动态模块导入
首先创建一个模块目录lib,然后在目录内创建一个模块为:aa.py 官方推荐: import importlib aa = importlib.import_module('lib.aa') c = ...
- 面向对象(五)--isinstance与issubclass方法、反射、内置方法(部分)、异常处理
一.isinstance与issubclass方法 1.isinstance是用来判断对象是否是某个类 isinstance(obj,class) 2.issubclass是用来判断一个类是否为另一个 ...
- 接口(Interfaces)与反射(reflection) 如何利用字符串驱动不同的事件 动态地导入函数、模块
标准库内部如何实现接口的 package main import ( "fmt" "io" "net/http" "os" ...
- 绑定与非绑定方法及反射,isinstance和issubclass内置函数
目录 绑定方法与非绑定方法 1.绑定方法 2.非绑定方法(staticmethod) isinstance和issubclass 内置函数 1.isinstance 2.issubclass 反射(面 ...
- isinstance与issubclass,反射
目录 isinstance与issubclass isinstance issubclass 反射 定义 反射在模块中的应用 内置方法 isinstance与issubclass isinstance ...
- python 全栈开发,Day23(复习,isinstance和issubclass,反射)
一.复习 class A: def func1(self):pass def func2(self): pass def func3(self): pass a = A() b = A() print ...
- day17 isinstance type issubclass 反射
1. issubclass,type,isinstance 1.issubclass 判断xxx是否yyy的子类 例: class Foo: pass class Bar(Foo): pass cla ...
- python基础(28):isinstance、issubclass、type、反射
1. isinstance和issubclass 1.1 isinstance isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(object): pa ...
随机推荐
- 每天学一点Docker(2)
容器runtime 容器runtime是容器真正运行的地方,runtime需要和操作系统kernel紧密结合,为容器提供运行环境. 比如说,java程序比作一个容器,JVM就是runtime.JVM为 ...
- python-集合内置函数详解
集合(S).方法名 等价符号 方法说明 s.issubset(t) s<=t 子集测试(允许不严格意义上的子集):s中所有的元素都是t的成员 s<t 子集测试(严格意义上的子集 ...
- linux 卸载安装node npm
1. 卸载node npm (1) 先卸载 npm: sudo npm uninstall npm -g (2) 然后卸载 Node.js. (2.1) 如果是 Ubuntu 系统并使用 apt-ge ...
- python3之序列化(pickle&json&shelve)
1.pickle模块 python持久化的存储数据: python程序运行中得到了一些字符串,列表,字典等数据,想要长久的保存下来,方便以后使用,而不是简单的放入内存中关机断电就丢失数据.python ...
- GO开发[一]:golang开发初探
一.Golang的安装 1.https://dl.gocn.io/ (国内下载地址) 2.https://golang.org/dl/ (国外下载地址) 3.现在studygolang中文网也可以了h ...
- div外观例子
title: div外观例子 date: 2018-1-15 14:00:00 tags: 前端 div css categories: 前端框架 --- 标题 我的标题 内容 Font Awesom ...
- js 移动端写搜索时怎么调用软键盘上面的搜索按钮
这段时间一直在做移动端,所以遇到很多问题,现在很多网站在做移动端搜索的时候都不会在后面加一个搜索按钮,而是直接调用输入法上面的搜索搜索按钮进行搜索 input的一个新属性给我们提供非常方便的书写, 就 ...
- 使用Java内置的Http Server构建Web应用
一.概述 使用Java技术构建Web应用时, 我们通常离不开tomcat和jetty之类的servlet容器,这些Web服务器功能强大,性能强劲,深受欢迎,是运行大型Web应用的必备神器. 虽然Jav ...
- C# 获取当前方法的名称空间、类名和方法名称
1.(new StackTrace()).GetFrame(1) // 0为本身的方法:1为调用方法2.(new StackTrace()).GetFrame(1).GetMethod().Name; ...
- 关于 AutomationProperties.Name 的一些总结
在 XAML 代码中,我们偶尔会看到 AutomationProperies 的代码,如 AutomationProperties.Name="xxxxx", Automation ...