面向对象 - 1.软件开发/2.异常处理/3.try...except的详细用法
1.软件开发
软件的开发其实一整套规范,我们所学的只是其中的一小部分,一个完整的开发过程,需要明确每个阶段的任务,在保证一个阶段正确的前提下再进行下一个阶段的工作,称之为软件工程
面向对象的软件工程包括下面几个部:
1 面向对象分析(object oriented analysis ,OOA)
2 面向对象设计(object oriented design,OOD)
3 面向对象编程(object oriented programming,OOP)
4 面向对象测试(object oriented test,OOT)
5 面向对象维护(object oriendted soft maintenance,OOSM)
#面向对象实战 参考 http://www.cnblogs.com/linhaifeng/articles/7341318.html
#作业:http://www.cnblogs.com/linhaifeng/articles/6182264.html
2.异常处理
1.什么是异常:异常是错误发生的信号,一旦程序出错,并且程序没有处理这个错误,那个就会抛出异常,并且程序的运行随之终止
--异常的追踪信息 异常类 异常值

2.错误分为两种:
2.1.语法错误 程序执行前就要立刻改正过来
2.2.逻辑错误
1.ValueError int('aaa')
2.NameError name
3.IndexError l=[1,2,3] l[100]
4.KeyError d={} d['name']
5.AttributeError class Foo:pass Foo.xxx
6.ZeroDivisionError 1/0
7.TypeError for i in 3:pass 3.异常的种类:
在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,一个异常标识一种错误
常见异常:
AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
IOError 输入/输出异常;基本上是无法打开文件
ImportError 无法引入模块或包;基本上是路径问题或名称错误
IndentationError 语法错误(的子类) ;代码没有正确对齐
IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError 试图访问字典里不存在的键
KeyboardInterrupt Ctrl+C被按下
NameError 使用一个还未被赋予对象的变量
SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
TypeError 传入对象类型与要求的不符合
UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它
ValueError 传入一个调用者不期望的值,即使值的类型是正确的
更多异常:
ArithmeticError
AssertionError
AttributeError
BaseException
BufferError
BytesWarning
DeprecationWarning
EnvironmentError
EOFError
Exception
FloatingPointError
FutureWarning
GeneratorExit
ImportError
ImportWarning
IndentationError
IndexError
IOError
KeyboardInterrupt
KeyError
LookupError
MemoryError
NameError
NotImplementedError
OSError
OverflowError
PendingDeprecationWarning
ReferenceError
RuntimeError
RuntimeWarning
StandardError
StopIteration
SyntaxError
SyntaxWarning
SystemError
SystemExit
TabError
TypeError
UnboundLocalError
UnicodeDecodeError
UnicodeEncodeError
UnicodeError
UnicodeTranslateError
UnicodeWarning
UserWarning
ValueError
Warning
ZeroDivisionError 4.异常处理 ---》 (不能让程序出错一点异常 就整个崩溃 需要检测异常 )
4.1.对于错误发生的条件 如果是可以预知的 此时应该用if 判断去预防异常.
age=input('>>:').strip()
if age.isdigit(): # 发生异常是可预知的 把异常拒掉了
age=int(age)
4.2.对于错误发生的条件 如果是不可预知的 此时应该用异常处理机制try...except
try...except 异常已经出现了 捕捉到 可以让程序继续运行
try:
...
except StopIteration:
print('出错了')
print('--------')
# print('1')
# int('asd')
# print('2')
# nameasa
# l=[1,2,3]
# l[100]
# d={}
# d['name']
# class Foo:
# pass
#
# Foo.xxx
# 1/0
# for i in 3:
# pass
# import time
# time.sleep(1000)
# ------------------------------
# AGE=10
# age=input('>>:').strip()
# if age.isdigit():
# age=int(age)
# if age > AGE:
# print('猜大了')
try:
f=open('a.txt','r',encoding='utf-8')
print(next(f),end='')
print(next(f),end='')
print(next(f),end='')
print(next(f),end='')
print(next(f),end='')
print(next(f),end='')
f.close()
except StopIteration:
print('出错了')
print('--------')
3.try...except的详细用法
1.异常类只能用来处理指定的异常情况,如果非指定异常则无法处理
2.多分支:被检测的代码块抛出的异常有多种可能性,并且我们需要针对每一种异常类型都定制专门的处理逻辑
3.万能异常:Exception 被检测的代码块抛出的异常有多种可能性,并且我们针对所有的异常类型都只用一种处理逻辑就可以了,那就使用 Exception
4.NameError/IndexError Exception 联合使用
5.其他结构 try...except else finally #用来回收资源
6.主动触发异常:raise 异常类型(值)
7.自定义异常类型 ==》 类型=类
8.断言assert 下面的代码 依赖上面的代码 的结果
9.使用异常时注意:
10.什么情况使用异常呢?
# 1.异常类只能用来处理指定的异常情况,如果非指定异常则无法处理
# s1 = 'hello'
# try:
# int(s1)
# except IndexError as e: # 未捕获到异常,程序直接报错
# print e # 2.多分支:被检测的代码块抛出的异常有多种可能性,
# 并且我们需要针对每一种异常类型都定制专门的处理逻辑
# try:
# print('---->1')
# # name
# print('---->2')
# l=[1,2,3]
# l[100]
# print('---->3')
# d={}
# # d['name']
# print('---->4')
#
# except NameError as e:
# print('---->',e)
#
# except IndexError as e:
# print('---->', e)
#
# except KeyError as e:
# print('---->',e)
#
# print('after code') # 3.万能异常:Exception 被检测的代码块抛出的异常有多种可能性,
# 并且我们针对所有的异常类型都只用一种处理逻辑就可以了,那就使用 Exception
# try:
# print('---->1')
# # name
# print('---->2')
# l=[1,2,3]
# l[100]
# print('---->3')
# d={}
# # d['name']
# print('---->4')
#
# except Exception as e:
# print('异常发生',e)
#
# print('after code') # 4.NameError/IndexError Exception 联合使用
# try:
# print('---->1')
# # name
# print('---->2')
# l=[1,2,3]
# # l[100]
# print('---->3')
# d={}
# d['name']
# print('---->4')
#
# except NameError as e:
# print('---->',e)
#
# except IndexError as e:
# print('---->', e)
#
# except Exception as e:
# print('统一的处理方式',e)
#
# print('after code') # 5.其他结构 try...except else finally #用来回收资源
# try:
# print('---->1')
# # name
# print('---->2')
# l=[1,2,3]
# # l[100]
# print('---->3')
# d={}
# # d['name']
# print('---->4')
#
# except NameError as e:
# print('---->',e)
#
# except IndexError as e:
# print('---->', e)
#
# except Exception as e:
# print('统一的处理方式',e)
#
# else:
# print('在被检测的代码块 没有发生异常时 执行')
#
# finally: # 一般在回收资源 时使用
# print('不管被检测的代码块 有没有异常 都执行')
#
# print('after code')
# --------------------------------
# try:
# f=open('a.txt','r',encoding='utf-8')
# print(next(f), end='')
# print(next(f), end='')
# print(next(f), end='')
# print(next(f), end='')
# print(next(f), end='')
# except Exception as e:
# print('统一的处理方式:',e)
# finally:
# f.close() # 6.主动触发异常:raise 异常类型(值)
# class People:
# def __init__(self,name,age):
# if not isinstance(name,str):
# raise TypeError('名字必须传入str')
# if not isinstance(age,int):
# raise TypeError('年龄必须传入int')
# self.name=name
# self.age=age # p=People('alice',18)
# p=People(33,18)
# p=People('alice','19') # 7.自定义异常类型 ==》 类型=类
# class MyException(BaseException):
# def __init__(self,msg):
# super(MyException, self).__init__()
# self.msg=msg
#
# def __str__(self):
# return '<%s>'%self.msg
#
# raise MyException('我自己的异常类型') # print(obj) # 8.断言assert 下面的代码 依赖上面的代码 的结果
# info={}
# info['name']='alice'
# info['age']=18 # if 'name' not in info:
# raise KeyError('必须有name这个key')
# if 'age' not in info:
# raise KeyError('必须有age这个key') # assert ('name' in info) and ('age' in info)
#
# if info['name']=='alice' and info['age']>10:
# print('welcome') # 9.使用异常时注意:
# 不要这样写 失去了写代码的意义
# try:
# pass
# except Exception:
# pass # 10.什么情况使用异常呢?
# 1.错误发生的条件能明确的预知 if
# 2.错误一定会发生,无法预知它发生的条件,不能让程序奔溃掉 才采用try...except
面向对象 - 1.软件开发/2.异常处理/3.try...except的详细用法的更多相关文章
- 5.15 python 面向对象的软件开发&领域模型
1.面向对象的软件开发 参考地址::http://www.cnblogs.com/linhaifeng/articles/6182264.html#_label14 面向对象的软件工程包括下面几个部: ...
- Python--反射(重点)、面向对象内置方法:如__str__、面向对象的软件开发
复习: Python3统一了类与类型 类的名称空间在定义阶段产生,看名称空间:类.__dict__ Python3特点:可以多继承 Python3都是新式类 继承意义:解决重复代码 组合:也是解决 ...
- day34 反射、面向对象内置方法:如__str__、面向对象的软件开发
Python之路,Day21 = 反射.面向对象内置方法:如__str__.面向对象的软件开发 几个内置查看的方法使用 .__base__ 查看类的继承结构.mro() 对象找属性的顺序存在里面 -- ...
- Python基础之面向对象的软件开发思路
当我们来到生产环境中的时候,对一个软件需要开发的时候,刚开始也可能会懵逼,挝耳挠腮.不知从何下手,其 实,大家也不要苦恼,这是大多数程序员都会遇到的问题.那么,我们就要想一想了,既然大家都会这样,到低 ...
- C#入门到精通系列课程——第1章软件开发及C#简介
◆本章内容 (1)了解软件 (2)软件开发相关概念 (3)认识.NET Framework (4)C#语言 (5)Visual Studio 2017 ◆本章简述 软件在现代人们的日常生活中随处可见, ...
- 软件开发的一些"心法"
从事软件开发也有好几年了,和一开始那个懵懵懂懂的小菜鸟相比,自己也感觉到了一些变化. 也许是熟能生巧, 趟过很多坑,但核心的绝不是这些细节的东西. 打个比方,如果说对某种语言的特性和技巧的掌握属于身法 ...
- C#面向插件级别的软件开发 - 开源研究系列文章
在现在的面向对象的分析与设计软件开发过程中,最开始就是面向对象的软件开发.但是,在实际的软件开发过程中,很多都是面向接口的开发方式,这种是一种面向对象开发的模式.但是,今天笔者给大家带来的是面向插件的 ...
- Python编程-绑定方法、软件开发
一.绑定方法与非绑定方法 1.绑定方法 绑定给谁,谁来调用就自动将它本身当作第一个参数传入 (1)绑定到类的方法:用classmethod装饰器装饰的方法. 为类量身定制 类.boud_method( ...
- 我的首个MOOC课程《面向对象软件开发实践》
我的首个MOOC课程<面向对象软件开发实践> 我将在网易云课堂开讲MOOC课<面向对象软件开发实践>(http://mooc.study.163.com/course/YOOK ...
随机推荐
- 点滴积累【C#】---对上传文件的路径进行加密,以免将路径暴露在浏览器上,避免一些安全隐患!
效果: 描述: 本事例是为解决在上传或下载文件时避免将路径暴露在外.在上传时将路径进行加密保存到DataTable或数据库中,在下载是再读取DataTable中加密数据进行解密下载. 代码: [前台代 ...
- Atitti. 语法树AST、后缀表达式、DAG、三地址代码
Atitti. 语法树AST.后缀表达式.DAG.三地址代码 抽象语法树的观点认为任何复杂的语句嵌套情况都可以借助于树的形式加以描述.确实,不得不承认应用抽象语法树可以使语句翻译变得相对容易,它很好地 ...
- ios的设计原则
ios的设计原则 iOS设计的详细的主要宗旨例如以下: 1.易操作,所关心的主题清新 2.UI控件布局合理,图片质量清新 3.用户的使用习惯 4.字体的大小,主次分明 5.舒适的动画效果 在创建一个新 ...
- django的html模板中获取字典的值
在django的html模板中获取字典中的值应当直接使用 字典.[key] 的方式 {% for i in lists %} <li id="{{i.id}}" class ...
- spring 多个数据库之间切换
多数据源问题很常见,例如读写分离数据库配置. 原来的项目出现了新需求,局方要求新增某服务器用以提供某代码,涉及到多数据源的问题. 研究成果如下: 1.首先配置多个datasource [html] v ...
- Java 编程
1,Java实体如果复写构造方法,一定要显式指定默认构造方法 2,集合初始化下面这种方法不可取 因为双括号初始化(DBI)创建了一个匿名类,该类引用了拥有对象的实例,如果匿名内部类被其他对象返回并持有 ...
- Oracle 错误 maximum number of processes(150) exceeded 解决办法
网上很多同行应该都遇到过这个问题,百度一搜 千篇一律的处理办法,就是加大进程数. 但是我这边情况不一样,因为我的Oracle 11g是早上刚装的,跟本没人用,我用PLSQL链接照样说不能链接. 我就在 ...
- LCD屏参数及应用举例
1. LCD参数及原理 R G B 信号 PCLK(像素时钟),LCLK(HSYNC,线时钟,水平同步时钟),FCLK(VSYNC,帧时钟,垂直同步时钟) 7寸屏一般由两种工作模式DE和时钟模式, ...
- pip 使用技巧
指定豆瓣源安装 pip install configparser -i http://pypi.douban.com/simple/ --trusted-host=pypi.douban.com/si ...
- 第二百三十三节,Bootstrap表格和按钮
Bootstrap表格和按钮 学习要点: 1.表格 2.按钮 本节课我们主要学习一下 Bootstrap 表格和按钮功能,通过内置的 CSS 定义,显示各 种丰富的效果. 一.表格 Bootstrap ...