1、异常基础

python在运行过程中,程序解释机制会测试代码,如检测不通过则会抛出异常。

try:
aa = 10
bb = ''
cc = aa + bb
except Exception as e:
print('error:',e) #output输出异常,数字不能与字符向加
error: unsupported operand type(s) for +: 'int' and 'str'
try:
aa = 10
bb = '10'
cc = aa + bb
except TypeError as e:
print('错误信息;',e)

2、异常种类

python中的异常种类非常多,每个异常专门处理某个项的异常!

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

3、异常的结构

try:# 主代码块

  pass

except KeyError as e:# 异常时,执行该块

   pass

else:# 主代码块执行完,执行该块

   pass

finally: # 无论异常与否,最终执行该块

   pass

4、自定义异常

class MyException(Exception):

    def __init__(self, msg):
self.message = msg def __str__(self):
return self.message try:
raise MyException('我的异常') #raise为主动触发异常
except MyException as e:
print('>>>:',e)

5、断言

assert断言是声明其布尔值必须为真的判定,如果发生异常就说明表达示为假。可以理解assert断言语句为raise-if-not,用来测试表示式,其返回值为假,就会触发异常

assert 1 == 1
print('---------------')
assert 1 == 2 #output,如果为真时不输出信息,如果为假时Flase则直接抛出异常
---------------
Traceback (most recent call last):
File "Z:/python_project/day18/ddd/yichang.py", line 26, in <module>
assert 1 == 2
AssertionError

6、反射

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

class A(object):
def __init__(self):
self.name = 'python'
self.age = 18 def func(self):
return self.age obj1 = A() #检查对象是否含有成员
print(hasattr(obj1,'age')) #True
print(hasattr(obj1,'func')) #True #获取对象成员
print(getattr(obj1,'name')) #python
print(getattr(obj1,'func')) #<bound method A.func of <__main__.A object at 0x000000C0C7B9D048>> #设置对象成员
setattr(obj1,'slary',9999)
print(getattr(obj1,'slary')) # #删除成员
delattr(obj1,'slary')
print(hasattr(obj1,'slary')) #False

结论:反射是通过字符串的形式操作对象相关的成员

class A(object):
def __init__(self):
self.name = 'python'
self.age = 18 def func(self):
print('func:',self.name)
return self.age obj1 = A() #通过获取对象的方法来执行对象方法
obj = A()
fun = getattr(obj,'func')
fun()

python3之异常处理,断言和反射的更多相关文章

  1. Python3 的异常处理

    Python3 的异常处理,在官方文档的 tutorial 中有说明. 这里把常用的异常处理方法都列出来,方便平时查找. 捕获异常基类 Python3 要求我们的异常必须继承 Exception 类. ...

  2. 【Python3之异常处理】

    一.错误和异常 1.错误 代码运行前的语法或者逻辑错误 语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正) def test: ^ SyntaxError: inva ...

  3. 面向对象【day08】:异常处理-断言(七)

    本节内容 1.概述 2.知识点回顾 3.断言 一.概述 python中断言,这个我是第一次听说到的,断言有什么用呢?断言就是做一些程序的检查工作,就是在执行之前需要做的一些检查,比如类似于安检一样,合 ...

  4. iOS-----程序异常处理----- 断言NSAssert()和NSParameterAssert区别和用处

    NSAssert和assert是断言,主要的差别是assert在断言失败的时候只是简单的终止程序,而NSAssert会报告出错误信息并且打印出来.所以尽管的使用NSAssert,可以不去使用asser ...

  5. Python3 异常与断言

    1.异常 当出现错误时,程序就会发生异常 num1=input('Please input a num1: ') num2=input('Please input a num2: ') print(f ...

  6. Python3之异常处理

    写自动化脚本时经常会用到异常处理,下面将python中的异常处理做一整理: 注意:以下所有事列中的111.txt文件不存在,所以会引起异常 用法一:try...except...else..类型 1. ...

  7. python3中异常处理方法 try-except-else-finally

    个人感觉逻辑上类似if else条件判断 但这是对语法错误以及抛出异常的处理 异常处理 try/except 异常捕捉可以使用 try/except 语句. 以下例子中,让用户输入一个合法的整数,但是 ...

  8. Python3基础 assert 断言 确保程序的正确运行条件

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  9. Python3中assert断言

    一般的用法是: assert condition 用来让程序测试这个condition,如果condition为false,那么raise一个AssertionError.逻辑上等于: if not ...

随机推荐

  1. HDU 4911 Inversion 树状数组求逆序数对

    显然每次交换都能降低1 所以求出逆序数对数,然后-=k就好了.. . _(:зゝ∠)_ #include<stdio.h> #include<string.h> #includ ...

  2. hdu 4869 Turn the pokers (思维)

    Turn the pokers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  3. javascript中的事件Event

    一.事件流 1.事件流:描述的是从页面中接受事件的顺序 IE的事件流是事件冒泡流,Netscape的事件流是事件捕获流. 2.事件冒泡 IE的事件流叫做事件冒泡(event bubbing),即事件开 ...

  4. MVC(二)

    一: 在新接触MVC的时候可以先使用VS建一个MVC项目(不是空项目哟),MVC特别人性化的建一个示例,展示了MVC项目的基本组成.如下: App_Data 数据库文件,需根据数据库变动而变更. Ap ...

  5. RESTful 的通俗解释

    转载自知乎,通俗易懂的讲解了RESTful链接:https://www.zhihu.com/question/28557115/answer/48094438 REST -- REpresentati ...

  6. tomcat启动端口号报错java.net.BindException: Cannot assign requested address

    异常信息 时间:2017-02-09 15:09:59,829 - 级别:[ERROR] - 消息: [other] Failed to start end point associated with ...

  7. .Net 异步方法, await async 使用

    最近朋友问起await  和 async第一次听说这个await ,就查了一下这个await使用在于 异步方法async 中,中文意思就是等待,经过一系列的百度参考简单的明白了这个东西的意思,  异步 ...

  8. ASP.NET Core 一步步搭建个人网站(3)_菜单管理

    上一章,我们实现了用户的注册和登录,登录之后展示的是我们的主页,页面的左侧是多级的导航菜单,定位并展示用户需要访问的不同页面.目前导航菜单是写死的,考虑以后菜单管理的便捷性,我们这节实现下可视化配置菜 ...

  9. NYOJ-106 简单背包问题

    首先观察题目,n表示输入数据的个数,s表示物品个数,m表示背包容重量,v表示物品单位重量的价值,w表示单个物品的总重量,物品可以分割,并且每个物品只可以拿一次,要求输出在满足包容重量的前提下包内物品价 ...

  10. iOS 内存泄漏排查以及处理

    使用Xcode7的Instruments检测解决iOS内存泄露   文/笨笨的糯糯(简书作者)原文链接:http://www.jianshu.com/p/0837331875f0作为一名iOS开发攻城 ...