python异常处理优点_python各类异常处理学习笔记
print("============异常与工具===================")
print("============一、异常基础===================")
"""
1、try/except
捕捉由 Python或你引起的异常并恢复。
2、try/finally
无论异常是否发生,执行清理行为。
3、raise
手动在代码中触发异常。
4、assert
有条件地在程序代码中触发异常。
5、with/as
在 Python2.6和后续版本中实现环境管理器(在2.5版中是可选功能)。
"""
def fetcher(obj,index):
return obj[index]
x='spam'
print(fetcher(x,3))
# try:
# fetcher(x,4)
# except IndexError:
# print('got exception')
def catcher():
try:
fetcher(x,4)
except IndexError:
print('got exception')
print('continuing')
catcher()
print("============1、用户异常的定义===================")
class Bad(Exception):
pass
def doomed():
raise Bad()
try:
doomed()
except Bad:
print('got Bad')
print("============2、终止行为===================")
try:
fetcher(x,3)
finally:
print('after fetch')
def after():
try:
fetcher(x,3)
finally:
print('after fetch')
print('after try?')
after()
with open('lumberjack.txt','w') as file:
file.write('The larch!\n')
"""
本章习题
1.说出异常处理的3个优点。
2.如果你不想做任何特殊的事情来处理异常,那么异常会发生什么呢?
3.如何从一个异常恢复你的脚本?
4.说出在脚本中触发异常的两种方式。
5.指出两种方式:不管异常是否发生,它们用来指定最终运行的行为。
"""
"""
1.异常处理对于错误处理、终止动作和事件通知有用。它可以简化特殊情况的处理,并且可以用来实现替代的控制流程。一般来讲,异常处理还可以减少程序所需的检
测错误代码的数量,因为所有的错误都由处理器来过滤,你可能不需要测试每个操作的输出。
2.任何未捕获的异常最终都流入默认的异常处理器, Python在程序的最顶端提供了它。这个处理器打印出类似的出错消息,并且退出程序。
3.如果你不想要默认消息和退出,可以编写ry/except语句来捕获并从触发的异常恢复。一旦捕获了一个异常,该异常将终止,并且程序继续。
4. raiseassert和语句可以用来触发一个异常,就好像该异常已经由 Python自身引
发。原则上讲,我们可以通过生成一个程序错误来引发异常,但是,这通常不是一个明确的目标。
5.try y/finally语句可以用来确保在一个代码块退出后执行的操作,而不管它是否会引
发一个异常。with/as语句也可以用来确保要运行的终止操作,但是,只有当处理的对象类型支持它的时候才可用。
"""
print("============二、异常编码细节===================")
"""
try:
#Run this main action first
except :
#Run if name1 is raised during try block
except(name2, name3):
#Run if any of these exceptions occur
except as :
#Run if name4 is raised, and get instance raised
except:
#Run for allother) exceptions raised
else:
#Run if no exception was raised during try block
except分句会捕捉异常, finally分句最后一定会执行,而如果没遇上异常,else分句就会执行。
"""
"""
try语句分句形式
分句形式 说明
except: 捕捉所有(其他)异常类型
except name: 只捕捉特定的异常
except name, value: 捕捉所列的异常和其额外的数据(或实例)
except(name1, name2): 捕捉任何列出的异常
except(name1,name2), value:捕捉任何列出的异常,并取得其额外数据
else: 如果没有引发异常,就运行
finally: 总是会运行此代码块
"""
# class MyError(Exception):pass
# def stuff(file):
# raise MyError()
# file= open('data','w')
# try:
# stuff(file)
# finally:
# file.close()
# print('not reached')
print("============三、统一try/exception/finally语句===================")
# try:
# main-action
# except Exception1:
# handler1
# except Exception1:
# handler2
# ...
# else:
# else-block
# finally:
# finally-block
"""
try --- except --- else --- finally
"""
print("============四、合并Try的例子===================")
sep = '-'*32+'\n'
print(sep+'Exception Raise And Caught')
try:
x='spam'[99]
except IndexError:
print('except run')
finally:
print('finally run')
print('after run')
print(sep + 'No Exception Raise')
try:
x='spam'[3]
except IndexError:
print('except run')
finally:
print('finally run')
print('after run')
print(sep + 'No Exception,With Else')
try:
x='spam'[3]
except IndexError:
print('except run')
else:
print('else run')
finally:
print('finally run')
print('after run')
print(sep + 'Exception Raise But Not Caught')
try:
x=1 / 0
except ZeroDivisionError:
print('except run')
finally:
print('finally run')
print('after run')
print("============五、环境管理协议===================")
# class TraceBlock:
# def message(self,arg):
# print('running',arg)
# def __enter__(self):
# print('starting with block')
# return self
# def __exit__(self, exc_type, exc_val, exc_tb):
# if exc_type is None:
# print('exited nomally\n')
# else:
# print('raise an exception!',exc_type)
# return False
# with TraceBlock() as action:
# action.message('test 1')
# print('reached')
#
# with TraceBlock() as action:
# action.message('test 2')
# raise TypeError
# print('not reached')
print("============二、异常对象===================")
"""
使用 raise语句主动抛出异常的意思是开发者可以自己制造程序异常,这里的程序异常不是指发生了内存溢出、列表越界访问等系统异常,而是指程序在执行过程中,发生
了用户输入的数据与要求数据不符、用户操作错误等问题,这些问题都需要程序进行处理并给出相应的提示。处理这些问题多使用判断语句,在判断语句体内进行相应的
问题处理,如果处理问题的语句过多,就会导致代码复杂化,代码结构不够清晰。在这种情况下,可以使用 raise语句主动抛出异常,由异常处理语句块进行处理。
"""
#用户登录判断,登录窗口设置
try:
print("请输入登录账号:")
username= input(">>:")
if username !="John":
raise Exception("用户名输入错误,请重新输入:")
print("请输入登录密码:")
psw= input(">>:")
if(psw !="123456"):
raise Exception("密码输入错误,请重新输入")
except Exception as e:
print(e)
print("============三、为什么使用类异常===================")
# class General(Exception):pass
# class Specific1(General):pass
# class Specific2(General):pass
#
# try:
# func()
# except(General,Specific1,Specific2):
# ...
"""
1、BaseException 异常的顶级根类
2、Exception 与应用相关的异常的顶层根超类,这是BaseException的一个直接子类,并且是所有其他内置异常的超类,除了系统退出事件类之外(SystemExit、
KeyboardInterruptGeneratorExit和)几乎所有的用户定义的类都应该继承自这个类,而不是BaseException。当遵从这一惯例的时候,在一条try语句的处理
器中指明 Exception,会确保你的程序将捕获除了系统退出事件之外的所有异常,通常该事件是允许通过的。实际上, Exception变成了try语句中的一个全捕获,
并且比一条空的 except更精确。
3、ArithmeticError:所有数值错误的超类(并且是Exception的一个子类)。
4、OverflowError:识别特定的数值错误的子类。
"""
# class FormatError(Exception):
# logfile = 'fomaterror.txt'
# def __init__(self,line,file):
# self.line = line
# self.file = file
# def logerror(self):
# log = open(self.logfile,'a')
# print('Error at',self.file,self.line,file=log)
# def parser():
# raise FormatError(40,'spam.txt')
# try:
# parser()
# except FormatError as exc:
# exc.logerror()
def action2():
print(1+[])
def action1():
try:
action2()
except TypeError:
print('inner try')
try:
action1()
except TypeError:
print('outer try')
print("============四、语法嵌套化==================")
try:
try:
action2()
except TypeError:
print('inner try')
except TypeError:
print('outer try')
python异常处理优点_python各类异常处理学习笔记相关推荐
- python编程语言继承_python应用:学习笔记(Python继承)
学习笔记(Python继承)Python是一种解释型脚本语言,可以应用于以下领域: web 和 Internet开发 科学计算和统计 人工智能 教育 桌面界面开发 后端开发 网络爬虫 有几种叫法(父类 ...
- python xlwings 切片_Python xlwings库学习笔记(1)
Python xlwings库学习笔记(1) Python是最近几年很火的编程语言,被办公自动化的宣传吸引入坑,办公自动化必然绕不开Excel的操作,能操作Excel的库有很多,例如: xlrd xl ...
- python dict方法_python dict()方法学习笔记
学习PYTHON 的dict()方法笔记. dict() -> new empty dictionary | dict(mapping) -> new dictionary initial ...
- python socket服务器_python网络编程学习笔记(三):socket网络服务器
1.TCP连接的建立方法 客户端在建立一个TCP连接时一般需要两步,而服务器的这个过程需要四步,具体见下面的比较.步骤 TCP客户端 TCP服务器 第一步 建立socket对象 建立socket对象 ...
- python怎样控制继电器_Python与硬件学习笔记:继电器的使用
(整理我在美诚创新中心教授Python与继电器相连接的资料,连接线路和程序都实验成功,大家可以自己学习调试,有啥不懂的可以互相探讨.) 继电器是一种电控制器件.它具有控制系统(又称输入回路)和被控制系 ...
- python单词词典_Python自然语言处理学习笔记(42):5.3 使用Python字典将单词映射到属性...
5.3 Mapping Words to Properties Using Python Dictionaries 使用Python字典将单词映射到属性 As we have seen, a tag ...
- python网络开发框架_python网络编程学习笔记(10):webpy框架
django和webpy都是python的web开发框架.Django的主要目的是简便.快速的开发数据库驱动的网站.它强调代码复用,多个组件可以很方便的以"插件"形式服务于整个框架 ...
- python datetime用法_python datetime用法学习笔记
一.主要思路:1.把表示时间的str转换为datetime对象 2.操作datetime对象输出期望的时间格式 二.把表示时间的str转换为datetime对象语法:datetime.strptime ...
- 23神经网络 :唐宇迪《python数据分析与机器学习实战》学习笔记
唐宇迪<python数据分析与机器学习实战>学习笔记 23神经网络 1.初识神经网络 百度深度学习研究院的图,当数据规模较小时差异较小,但当数据规模较大时深度学习算法的效率明显增加,目前大 ...
最新文章
- android怎么播放音频,Android播放音频的两种方式
- 计算机专业中专排名,成都计算机中专学校排名
- matlab lu分解 l不是下三角,在MATLAB中执行LU分解而不进行旋转
- 蓝桥杯备战(一)3n+1问题
- 逆水寒服务器维护公告,逆水寒1月3日更新了什么 逆水寒1月3日更新维护公告
- PHP后台管理登录界面代码
- linux vi命令详解 修改几行,Linux系统——Vi命令讲解
- FPGA时钟电路PCBlayout设计原则
- 快速学习Grasshopper的方法
- 用c写一个等腰三角星星图案
- Python实用编程技巧(二)
- HDU 4489 The King’s Ups and Downs(组合DP)
- File Storage:文件存储
- 关于扩展IP地址空间的几个方案的探讨
- 【数值分析】复化积分公式
- springboot毕业设计 基于springboot家教预约网站系统毕业设计设计与实现参考
- 华为服务器的系统,华为服务器 操作系统
- linux 安装拼音QQ
- Cobar分布式关系数据库访问代理
- 视频教程-网管转行linux运维并做到运维经理经验分享-Linux
热门文章
- SAP CRM HANA report里 默认filter 的工作机制分析
- WebClient UI MVC data binding的实现
- when is IBASE status changed from inital to created - not answered
- transport request 实现原理
- SAP IBASE hierarchy remove - step2 handling
- SAP ABAP Workflow 显示问题
- Another approach to enable table edit in SE16
- add to -append Backend implementation
- 关掉微软Word的一些不必要的插件,提高启动速度
- libcoredb.class.php,ThinkPHP/Lib/Core/Db.class.php中pdo处理逻辑似乎不完善,导致config中pdo配置失效...