0910--https://www.cnblogs.com/fnng/archive/2013/04/28/3048356.html

Python异常

Python用异常对象(exception object)来表示异常情况。遇到错误后。会引发异常。如果异常对象未被处理或捕捉,程序就会用所谓的回溯(Traceback,一种错误信息)终止执行:

>>> 1/0
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
1/0
ZeroDivisionError: division by zero

raise语句

为了引发异常,可以使用一个类(Exception的子类)或者实例参数调用raise语句。下面的例子使用内建的Exception异常类:

>>> raise Exception('hyperdrive overload')
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
raise Exception('hyperdrive overload')
Exception: hyperdrive overload

系统自带的内建异常类:

自定义异常

尽管内建的异常已经包括了大部分的情况,而且对于很多要求都已经足够了,但有些时候还是需要创建自己的异常类。

和其他类一样,只是要确保从Exception类继承,不管是直接继承还是间接继承。像下面这样:

>>> class someCustomException(Exception):pass

捕捉异常

使用try/except来实现异常的捕捉处理。

假设创建了一个让用户输入两个数,然后进行相除的程序:

try:
x = int(input('Enter the first number:'))
y = int(input('Enter the sencond number:'))
z = x/y
print(z)
except ZeroDivisionError:
print('输入的数字不能为0!') #输入
Enter the first number:1
Enter the sencond number:0
输入的数字不能为0!

假如,我们再调试的时候引发异常会好些,如果在与用户的进行交互的过程中又是不希望用户看到异常信息的。如何开启/关闭“屏蔽”机制?

class MuffledCalulator:
muffled = False #这里默认关闭屏蔽
def calc(self,expr):
try:
return eval(expr)
except ZeroDivisionError:
if self.muffled:
print ('Division by zero is illegal')
else:
raise #运行程序:
>>> calculator = MuffledCalulator()
>>> calculator.calc('10/2')
5
>>> calculator.clac('10/0') Traceback (most recent call last):
File "<pyshell#30>", line 1, in <module>
calculator.clac('10/0')
AttributeError: MuffledCalulator instance has no attribute 'clac' #异常信息被输出了 >>> calculator.muffled = True #现在打开屏蔽
>>> calculator.calc('10/0')
Divsion by zero is illagal

多个except子句

如果运行输入两个数,求除法程序,输入非数字的内容,还会产生另外一个异常:

try:
x = int(input('Enter the first number:'))
y = int(input('Enter the sencond number:'))
z = x/y
print(z)
except ZeroDivisionError:
print('输入的数字不能为0!')
except ValueError:
print('请输入数字')
#运行程序
Enter the first number: 10
Enter the second number: 'hello,word'
请输入数字!

一个块获取多个异常

try:
x = int(input('Enter the first number:'))
y = int(input('Enter the second number:'))
print(x/y)
except (ZeroDivisionError,TypeError,NameError,ValueError):
print("输入的内容有误,请输入非0数字!")
#运行程序
Enter the first number:1
Enter the second number:0
输入的内容有误,请输入非0数字!
#输入非数字
Enter the first number:a
输入的内容有误,请输入非0数字!

捕捉全部异常

就算以上处理了好几种异常,总有不小心忽略处理的情况,如果真想用一段代码捕捉所有异常,那么可在except子句中忽略所有的异常类:

try:
x = int(input('Enter the first number:'))
y = int(input('Enter the second number:'))
print (x/y)
except:
print ('Sorry,Please enter again!')
#运行程序
Enter the first number:1
Enter the second number:djfjshfjkd
Sorry,Please enter again!

加入循环,若用户输入了错误信息,允许重新输入

while True:
try:
x = int(input('Enter the first number:'))
y = int(input('Enter the second number:'))
value = x/y
print ('x/y is',value)
break
except:
print ('输入的内容无效,请重新输入!')
#执行程序
Enter the first number:a
输入的内容无效,请重新输入!
Enter the first number:
输入的内容无效,请重新输入!
Enter the first number:1
Enter the second number:0
输入的内容无效,请重新输入!
Enter the first number:1
Enter the second number:3
x/y is 0.3333333333333333

python学习记录(八)的更多相关文章

  1. Python学习记录day5

    title: Python学习记录day5 tags: python author: Chinge Yang date: 2016-11-26 --- 1.多层装饰器 多层装饰器的原理是,装饰器装饰函 ...

  2. Python学习记录day6

    title: Python学习记录day6 tags: python author: Chinge Yang date: 2016-12-03 --- Python学习记录day6 @(学习)[pyt ...

  3. python学习第八讲,python中的数据类型,列表,元祖,字典,之字典使用与介绍

    目录 python学习第八讲,python中的数据类型,列表,元祖,字典,之字典使用与介绍.md 一丶字典 1.字典的定义 2.字典的使用. 3.字典的常用方法. python学习第八讲,python ...

  4. Python学习记录day8

    目录 Python学习记录day8 1. 静态方法 2. 类方法 3. 属性方法 4. 类的特殊成员方法 4.1 __doc__表示类的描述信息 4.2 __module__ 和 __class__ ...

  5. Python学习记录day7

    目录 Python学习记录day7 1. 面向过程 VS 面向对象 编程范式 2. 面向对象特性 3. 类的定义.构造函数和公有属性 4. 类的析构函数 5. 类的继承 6. 经典类vs新式类 7. ...

  6. Python学习记录:括号配对检测问题

    Python学习记录:括号配对检测问题 一.问题描述 在练习Python程序题的时候,我遇到了括号配对检测问题. 问题描述:提示用户输入一行字符串,其中可能包括小括号 (),请检查小括号是否配对正确, ...

  7. 实验楼Python学习记录_挑战字符串操作

    自我学习记录 Python3 挑战实验 -- 字符串操作 目标 在/home/shiyanlou/Code创建一个 名为 FindDigits.py 的Python 脚本,请读取一串字符串并且把其中所 ...

  8. 我的Python学习记录

    Python日期时间处理:time模块.datetime模块 Python提供了两个标准日期时间处理模块:--time.datetime模块. 那么,这两个模块的功能有什么相同和共同之处呢? 一般来说 ...

  9. Python 学习记录

    记录一些 学习python 的过程 -------------------------------------- 1. 初始学习 @2013年10月6日 今天开始学习python 了 遇到好多困难但是 ...

随机推荐

  1. 小小知识点(十七)——对数形式功率(dBm)与非对数形式功率(w)之间的换算关系

    摘自https://blog.csdn.net/shij19/article/details/52946454 dBm 物理含义是:一个表示功率绝对值的值(也可以认为是以1mW功率为基准的一个比值) ...

  2. 变量内容的删除、取代与替换(optional)

    这部分内容非常繁琐且不易记忆且枯燥,用到来查询即可. 1.变量内容的删除 这一部分比较细枝末节,就不再一一手打了,贴范例图片 #:符合取代文字的最短的一个 ##:符合取代文字的最长的一个 2.变量内容 ...

  3. VLC播放器的快捷键(shutcut)

    ubuntu上的视频播放器功能简陋,不支持快慢速,于是需要一款播放器来替代它,从网上找了找,大家对VLC的评价出奇的一致, 于是试水了一下,发现功能确实强大,支持大多数多媒体文件以及各类流媒体协议 在 ...

  4. vnpy源码阅读学习(4):自己写一个类似vnpy的UI框架

    自己写一个类似vnpy的界面框架 概述 通过之前3次对vnpy的界面代码的研究,我们去模仿做一个vn.py的大框架.巩固一下PyQt5的学习. 这部分的代码相对来说没有难度和深度,基本上就是把PyQt ...

  5. Nginx作为静态web服务器——缓存原理

    浏览器缓存 ​ 客户端无缓存的情况下 ​ 客户端有缓存的情况下 ​ 校验过期机制 ​ 本地客户端会检查Cache-Control(max-age)缓存是否过期,(max-age)为过期时间 Last- ...

  6. 洛谷 UVA1395 苗条的生成树 Slim Span

    题目链接 题目描述 求所有生成树中最大边权与最小边权差最小的,输出它们的差值. 题目分析 要求所有生成树中边权极差最小值,起初令人无从下手.但既然要求所有生成树中边权极差最小值,我们自然需要对每一棵生 ...

  7. 百度搜索关键词联想API JSONP使用实例

    许多搜索引擎都提供了关键词联想api,且大多数都是jsonp. Jsonp(JSON with Padding) 是 json 的一种"使用模式",可以让网页从别的域名(网站)那获 ...

  8. python 抓一下 循环的访问也可以

    #!/usr/bin/python # -*- coding: utf-8 -*- #encoding=utf-8 #Filename:urllib2-header.py import urllib2 ...

  9. T117897 七步洗手法 / PJT1(洛谷)

    题目:现在有n个人需要依次使用1个洗手池洗手,进行一步洗手需要1单位时间.他们每个人至少会进行一步洗手,但是却不一定进行了完整的七部洗手. 现在你知道了他们总共的洗手时间为t,请你推测他们有多少人进行 ...

  10. Apache Hudi 0.5.1版本重磅发布

    历经大约3个月时间,Apache Hudi 社区终于发布了0.5.1版本,这是Apache Hudi发布的第二个Apache版本,该版本中一些关键点如下 版本升级 将Spark版本从2.1.0升级到2 ...