python3之异常处理,断言和反射
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之异常处理,断言和反射的更多相关文章
- Python3 的异常处理
Python3 的异常处理,在官方文档的 tutorial 中有说明. 这里把常用的异常处理方法都列出来,方便平时查找. 捕获异常基类 Python3 要求我们的异常必须继承 Exception 类. ...
- 【Python3之异常处理】
一.错误和异常 1.错误 代码运行前的语法或者逻辑错误 语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正) def test: ^ SyntaxError: inva ...
- 面向对象【day08】:异常处理-断言(七)
本节内容 1.概述 2.知识点回顾 3.断言 一.概述 python中断言,这个我是第一次听说到的,断言有什么用呢?断言就是做一些程序的检查工作,就是在执行之前需要做的一些检查,比如类似于安检一样,合 ...
- iOS-----程序异常处理----- 断言NSAssert()和NSParameterAssert区别和用处
NSAssert和assert是断言,主要的差别是assert在断言失败的时候只是简单的终止程序,而NSAssert会报告出错误信息并且打印出来.所以尽管的使用NSAssert,可以不去使用asser ...
- Python3 异常与断言
1.异常 当出现错误时,程序就会发生异常 num1=input('Please input a num1: ') num2=input('Please input a num2: ') print(f ...
- Python3之异常处理
写自动化脚本时经常会用到异常处理,下面将python中的异常处理做一整理: 注意:以下所有事列中的111.txt文件不存在,所以会引起异常 用法一:try...except...else..类型 1. ...
- python3中异常处理方法 try-except-else-finally
个人感觉逻辑上类似if else条件判断 但这是对语法错误以及抛出异常的处理 异常处理 try/except 异常捕捉可以使用 try/except 语句. 以下例子中,让用户输入一个合法的整数,但是 ...
- Python3基础 assert 断言 确保程序的正确运行条件
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- Python3中assert断言
一般的用法是: assert condition 用来让程序测试这个condition,如果condition为false,那么raise一个AssertionError.逻辑上等于: if not ...
随机推荐
- hdu1754 I Hate It (线段树 更新点的值)
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- C++、Objective-C 混合编程
在XCODE中想使用C++代码,你须要把文件的扩展名从.m改成.mm.这样才会启动g++编译器. 我们来看个測试代码: [java] view plaincopy class TestC { priv ...
- Android PopupWindows
今天了解到PopupWindows这个布局,PopupWindow这个类用来实现一个弹出框,能够使用随意布局的View作为其内容,这个弹出框是悬浮在当前activity之上的. 以下是一个实例 xml ...
- css中设置div水平居中,margin:0px auto无用的情况
在CSS中加了margin:0px auto;却没有效果,不能实现居中的问题!margin:0px auto;意思就是:上下边界为0.左右依据宽度自适应!就是水平居中的意思.无效的原因是,当你没有设置 ...
- SQL运行时间
打开SQL运行时间统计 set timing on; 查询是否有运行时间较长的SQL存在 select a.sid, b.sql_text from v$session a, v$sqlare ...
- 用枚举来处理java自定义异常
在系统开发过程中,总少不免要自己处理一些异常信息,然后将异常信息变成友好的提示返回到客户端的这样一个过程,之前都是new一个自定义的异常,当然这个所谓的自定义异常也是继承RuntimeExceptio ...
- .Net 异步方法, await async 使用
最近朋友问起await 和 async第一次听说这个await ,就查了一下这个await使用在于 异步方法async 中,中文意思就是等待,经过一系列的百度参考简单的明白了这个东西的意思, 异步 ...
- APP Store开发指南
App Store 审核指南 iOS App打包上架超详细流程 ---2017.03 苹果对开发者提交的应用的审核之严格是出了名的,了解苹果的审核标准对于开发者防止应用被拒有着十分重要的意义.几天前苹 ...
- 函数PYXX_READ_PAYROLL_RESULT的dump问题
发现有两个HR的后台定时任务出现dump,日志表示,是PYXX_READ_PAYROLL_RESULT产生了类型冲突的异常CX_SY_DYN_CALL_ILLEGAL_TYPE. 日志标题部分: 类别 ...
- 1_3 C语言解决求n!
求n!(n为键盘输入的任意整数值).要求分别用while语句和for语句实现 用while语句实现: #include <stdio.h> int main() { int n; scan ...