回味Python2.7——笔记3
一、错误和异常
1、异常处理
>>> while True: ... try: ... x = int(raw_input("Please enter a number: ")) ... break ... except ValueError: ... print "Oops! That was no valid number. Try again..." ...
try
语句按如下方式工作:
- 首先,执行 try 子句 (在
try
和except
关键字之间的部分)。 - 如果没有异常发生, except 子句 在
try
语句执行完毕后就被忽略了。 - 如果在 try 子句执行过程中发生了异常,那么该子句其余的部分就会被忽略。如果异常匹配于
except
关键字后面指定的异常类型,就执行对应的except
子句。然后继续执行try
语句之后的代码。 - 如果发生了一个异常,在
except
子句中没有与之匹配的分支,它就会传递到上一级try
语句中。如果最终仍找不到对应的处理语句,它就成为一个 未处理异常 ,终止程序运行,显示提示信息。
一个 try
语句可能包含多个 except 子句,分别指定处理不同的异常。至多只会有一个分支被执行。异常处理程序只会处理对应的 try 子句中发生的异常,在同一个 try
语句中,其他子句中发生的异常则不作处理。一个 except 子句可以在括号中列出多个异常的名字,例如:
... except (RuntimeError, TypeError, NameError): ... pass
最后一个 except 子句可以省略异常名称,以作为通配符使用。
while True:try:x=input('please enter the first number:')y=input('please enter the second number:')print 1.*x/yexcept:print 'something wrong happened! enter again!'else:break
please enter the first number:1 please enter the second number:w something wrong happened! enter again!2、 elsetry
...except
语句可以带有一个 else子句 ,该子句只能出现在所有 except 子句之后。当 try 语句没有抛出异常时,需要执行一些代码,可以使用这个子句。
for arg in sys.argv[1:]:try:f = open(arg, 'r')except IOError:print 'cannot open', argelse:print arg, 'has', len(f.readlines()), 'lines'f.close()
使用 else
子句比在 try
子句中附加代码要好,因为这样可以避免 try
... except
意外的截获本来不属于它们保护的那些代码抛出的异常。
3、抛出异常
raise
语句允许程序员强制抛出一个指定的异常。
>>> raise NameError('HiThere') Traceback (most recent call last):File "<stdin>", line 1, in ? NameError: HiThere
4、 用户自定义异常
在程序中可以通过创建新的异常类型来命名自己的异常(Python 类的内容请参见 类 )。异常类通常应该直接或间接的从 Exception
类派生
>>> class MyError(Exception): ... def __init__(self, value): ... self.value = value ... def __str__(self): ... return repr(self.value) ... >>> try: ... raise MyError(2*2) ... except MyError as e: ... print 'My exception occurred, value:', e.value ... My exception occurred, value: 4 >>> raise MyError('oops!') Traceback (most recent call last):File "<stdin>", line 1, in ? __main__.MyError: 'oops!'
5、finally
不管有没有发生异常, finally子句 在程序离开 try
后都一定会被执行。当 try
语句中发生了未被 except
捕获的异常(或者它发生在 except
或 else
子句中),在 finally
子句执行完后它会被重新抛出。 try
语句经由 break
,continue
或 return
语句退 出也一样会执行 finally
子句
>>> def divide(x, y): ... try: ... result = x / y ... except ZeroDivisionError: ... print "division by zero!" ... else: ... print "result is", result ... finally: ... print "executing finally clause" ... >>> divide(2, 1) result is 2 executing finally clause >>> divide(2, 0) division by zero! executing finally clause >>> divide("2", "1") executing finally clause Traceback (most recent call last):File "<stdin>", line 1, in ?File "<stdin>", line 3, in divide TypeError: unsupported operand type(s) for /: 'str' and 'str'
二、类
使用class语句来创建一个新类,class之后为类的名称并以冒号结尾,如下实例:
class ClassName:'类的帮助信息' #类文档字符串class_suite #类体
类的帮助信息可以通过ClassName.__doc__查看。
class_suite 由类成员,方法,数据属性组成。
class Student(object):def __init__(self, name, score):self.name = nameself.score = scoredef print_score(self):print '%s: %s' % (self.name, self.score)
Python内置类属性
- __dict__ : 类的属性(包含一个字典,由类的数据属性组成)
- __doc__ :类的文档字符串
- __name__: 类名
- __module__: 类定义所在的模块(类的全名是'__main__.className',如果类位于一个导入模块mymod中,那么className.__module__ 等于 mymod)
- __bases__ : 类的所有父类构成元素(包含了一个由所有父类组成的元组)
#!/usr/bin/python # -*- coding: UTF-8 -*-class Employee:'所有员工的基类'empCount = 0def __init__(self, name, salary):self.name = nameself.salary = salaryEmployee.empCount += 1def displayCount(self):print "Total Employee %d" % Employee.empCountdef displayEmployee(self):print "Name : ", self.name, ", Salary: ", self.salaryprint "Employee.__doc__:", Employee.__doc__ print "Employee.__name__:", Employee.__name__ print "Employee.__module__:", Employee.__module__ print "Employee.__bases__:", Employee.__bases__ print "Employee.__dict__:", Employee.__dict__
Employee.__doc__: 所有员工的基类 Employee.__name__: Employee Employee.__module__: __main__ Employee.__bases__: () Employee.__dict__: {'__module__': '__main__', 'displayCount': <function displayCount at 0x10a939c80>, 'empCount': 0, 'displayEmployee': <function displayEmployee at 0x10a93caa0>, '__doc__': '\xe6\x89\x80\xe6\x9c\x89\xe5\x91\x98\xe5\xb7\xa5\xe7\x9a\x84\xe5\x9f\xba\xe7\xb1\xbb', '__init__': <function __init__ at 0x10a939578>}
类的继承
面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。继承完全可以理解成类之间的类型和子类型关系。
#!/usr/bin/python # -*- coding: UTF-8 -*-class Parent: # 定义父类parentAttr = 100def __init__(self):print "调用父类构造函数"def parentMethod(self):print '调用父类方法'def setAttr(self, attr):Parent.parentAttr = attrdef getAttr(self):print "父类属性 :", Parent.parentAttrclass Child(Parent): # 定义子类def __init__(self):print "调用子类构造方法"def childMethod(self):print '调用子类方法 child method'c = Child() # 实例化子类 c.childMethod() # 调用子类的方法 c.parentMethod() # 调用父类方法 c.setAttr(200) # 再次调用父类的方法 c.getAttr() # 再次调用父类的方法
方法重写
如果你的父类方法的功能不能满足你的需求,你可以在子类重写你父类的方法:
#!/usr/bin/python # -*- coding: UTF-8 -*-class Parent: # 定义父类def myMethod(self):print '调用父类方法'class Child(Parent): # 定义子类def myMethod(self):print '调用子类方法'c = Child() # 子类实例
转载于:https://www.cnblogs.com/lovephysics/p/7225710.html
回味Python2.7——笔记3相关推荐
- python2 urllib 笔记
python2 urllib 笔记 import urllibbase='http://httpbin.org/' ip=base+'ip' r=urllib.urlopen(ip) print r. ...
- python3语法都相同吗_python3.4学习笔记(一) 基本语法 python3不向下兼容,有些语法跟python2.x不一样...
python3.4学习笔记(一) 基本语法 python3不向下兼容,有些语法跟python2.x不一样,IDLE shell编辑器,快捷键:ALT+p,上一个历史输入内容,ALT+n 下一个历史输入 ...
- python2 float类型_Python学习笔记2:基本数据类型
Python中的变量不需要声明.每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象 ...
- python映射类型-python2.x学习笔记(8)-映射和集合类型
1. 字典是 Python 语言中唯一的映射类型.映射类型对象里哈希值(键) 和指向的对象(值)是一对一的关系. 2. 一个字典对象是可变的,它是一个容器类型,能存储任意个数的 Python 对象,其 ...
- Linux笔记-Centos7将python2升级为python3(及修改yum配置防报错)
安装各种依赖: yum install make gcc gcc-c++ yum install libffi-devel -y yum -y install zlib* 下载Python3.7.8并 ...
- TensorFlow工作笔记001---Centos7.3下安装TensorFlow最新版本,基于python2.7.5的,没有编译TensorFlow的源码
技术交流QQ群[JAVA,.NET,BigData,AI]:170933152 Centos7.3下安装TensorFlow最新版本,基于python2.7.5的,没有编译TensorFlow的源码, ...
- python2 print_【学习笔记】python2的print和python3的print()
python2.x和3.x中的输出语句有着明显不同 2.x中的print不是个函数,输出格式如下 1 Python 2.7.12+ (default, Aug 4 2016, 20:04:34)2 [ ...
- [《Python2.1宝典》笔记] 12-14章
第十二章 存储数据和对象 12.1数据存储概述 12.1.1文本与二进制对比 文本格式易于阅读和调试,跨平台性能好.二进制格式占用空间小,适于按记录存取. 12.1.2压缩 假如对象的大小开始成为问题 ...
- python二郎成长笔记(一)(pip升级,python入门,基础,python2和3不同格式带来的问题,头文件引用的格式,变量的类型,__name__ == '__main__')
二郎的操作系统是windows,之前同时安装了python2和python3,因此在一些应用中还涉及了版本切换以及安装插件等问题. 同时安装是指在Anaconda中完成的,Anaconda(官方网站) ...
最新文章
- 主机甲和主机乙之间已建立一个TCP连接,TCP最大段长为1000B。若主机甲的当前拥塞窗口为4000B,在主机甲向主机乙连续发送两个最大段后,成功收到主机乙发送的第一个段的确认段,确认段中通告的接收窗
- python应用题_Python简单应用题
- DataX不支持Mysql8.x
- git之windows下创建.gitignore文件
- telnet的基本配置(cisco、H3C、huawei 三个例子)
- Atitit 可读性技术与实践范例 艾提拉著 目录 1. 提升可读性的技术类	2 1.1. 本地化命名封装	2 1.2. 表格映射表代替选择	2 1.3. 1.2. Dsl	提升抽象到dsl级别	2
- js实现简单的图片上传
- 计算机网络hdcp是什么意思,NTSC,HDCP ,NTSC/HDCP是什么意思
- 凯恩斯主义税收思想概述
- 解决MySQL数据库登录报错原因以及修改MySQL数据库登录密码;
- 微信小程序3-模板与配置
- gxworks2使用指令手册_GX Works2操作手册(智能功能功能模块操作篇):三菱 GX 三菱 GX Works2操作手册(智能功能功能模块操作篇)...
- 马云斯坦福大学演讲:想法与技术可以改变世界
- Machine Learning Approach to RF Transmitter Identification
- 【ZT】2D动画制作工具比较
- qq登陆超时00001错误
- pat甲级 第一章 字符串1-10 自用
- mysql如何加悲观锁_【mysql】关于悲观锁
- 展望2025:决定未来经济的12大颠覆技术
- 深度学习中patch的意思
热门文章
- 最简单的基于FFmpeg的移动端例子:IOS HelloWorld
- ITU-R BT.1788建议书 对多媒体应用中视频质量的主观评估方法
- QQ资料清空php源码,[php源码][QQ玫瑰小镇]一键收铲种,php网页版
- python 自动登录网站_分析某网站,并利用python自动登陆该网站,下载网站内容...
- java 综合练习_Java 之综合练习
- ACM-ICPC常用模板更新
- 【CCCC】L2-002 链表去重 (25分),,把一个链表拆成两个
- 技嘉GA7PESH3主板,官网驱动下载,官方使用说明
- JSP→JavaWeb简介、Tomcat服务器安装启动测试目录、Tomcat手动创建项目、开发工具MyEclipse与Eclipse配置环境、MyEclipse创建Web程序目录、修改Tomcat端口
- java的字符_Java中的字符