python 的处理错误的方式:

1> 断言

    assert condition
相当于
if not condition:
crash program
断言设置的目的就是因为与其让程序晚点崩溃,不如直接设置错误情况,让它直接崩溃
>>> age = -1
>>> assert 0 < age < 100
AssertionError

2> raise语句

    通过raise可以引发异常
>>> raise Exception
Traceback (most recent call last):
File "<pyshell#173>", line 1, in <module>
raise Exception
Exception
>>> raise Exception('overload')
Traceback (most recent call last):
File "<pyshell#174>", line 1, in <module>
raise Exception('overload')
Exception: overload 此外常见的内建异常类有:
Exception 所有异常的基类
AttributeError 特性应用或赋值失败时引发
IOError 试图打开不存在的文件时引发
IndexError 在使用序列中不存在的索引时引发
KeyError 在使用映射不存在的键时引发
NameError 在找不到名字(变量)时引发
SyntaxError 在代码为错误形式时引发
TypeError 在内建操作或者函数应用于错误类型的对象是引发
ValueError 在内建操作或者函数应用于正确类型的对象,但是该对象使用不合适的值时引发
ZeroDivisionError 在除法或者摸除操作的第二个参数为0时引发

3> 捕捉异常

    try:
x = input()
y = input()
print(x/y)
except ZeroDivisionError:
print("Division by Zero")
类似这样try/except形式就是来捕捉可能发生的异常错误,一旦出现ZeroDivisionError错误信息,则运行except ZeroDivisionError之后的代码 通过多个except来捕捉不同错误信息
def calc(expr):
try:
return eval(expr)
except ZeroDivisionError:
print("Divison by zero")
except TypeError:
print('This is not a number?')
一个块捕捉多个错误信息
def calc(expr):
try:
return eval(expr)
except (ZeroDivisionError, TypeError):
print("Input has some bugs")
打印错误信息
def calc(expr):
try:
return eval(expr)
except (ZeroDivisionError, TypeError) as error:
print(error)
对于其他错误信息处理
def calc(expr):
try:
return eval(expr)
except ZeroDivisionError:
print("Divison by zero")
except:
print('haha, something unknown happened!')
else语句用于不出现错误信息
def calc(expr):
try:
return eval(expr)
except ZeroDivisionError:
print("Divison by zero")
else:
print("Oh, it goes well!") 此外还有finally语句,无论是否错误均会执行 实际应用:(输入表达式直到可以计算)
while True:
try:
print(eval(input()))
except:
print('Please reinput until you input the correct expression!')
else:
break;
finally:
print('I love the world whatever!') #即使else中break也会执行finally

4> 常见错误

BaseException
+-- SystemExit
+-- KeyboardInterrupt
+-- GeneratorExit
+-- Exception
+-- StopIteration
+-- StandardError
| +-- BufferError
| +-- ArithmeticError
| | +-- FloatingPointError
| | +-- OverflowError
| | +-- ZeroDivisionError
| +-- AssertionError
| +-- AttributeError
| +-- EnvironmentError
| | +-- IOError
| | +-- OSError
| | +-- WindowsError (Windows)
| | +-- VMSError (VMS)
| +-- EOFError
| +-- ImportError
| +-- LookupError
| | +-- IndexError
| | +-- KeyError
| +-- MemoryError
| +-- NameError
| | +-- UnboundLocalError
| +-- ReferenceError
| +-- RuntimeError
| | +-- NotImplementedError
| +-- SyntaxError
| | +-- IndentationError
| | +-- TabError
| +-- SystemError
| +-- TypeError
| +-- ValueError
| +-- UnicodeError
| +-- UnicodeDecodeError
| +-- UnicodeEncodeError
| +-- UnicodeTranslateError
+-- Warning
+-- DeprecationWarning
+-- PendingDeprecationWarning
+-- RuntimeWarning
+-- SyntaxWarning
+-- UserWarning
+-- FutureWarning
+-- ImportWarning
+-- UnicodeWarning
+-- BytesWarning

Python3 学习第三弹:异常情况如何处理?的更多相关文章

  1. 前端学习 第三弹: JavaScript语言的特性与发展

    前端学习 第三弹: JavaScript语言的特性与发展 javascript的缺点 1.没有命名空间,没有多文件的规范,同名函数相互覆盖 导致js的模块化很差 2.标准库很小 3.null和unde ...

  2. Python3 学习第十弹: 模块学习三之数字处理

    math模块 提供基础的数学函数, cos(3.14) = -0.999..(弧度制) acos(1) = 0.0 sqrt(9) = 3.0 degrees(3.14) = 179.9999..(弧 ...

  3. Python3 学习第四弹:编码问题(转载)

    关于python的编码问题一直以来不得解,终于在今天从这篇博文中明白了. 原文地址: http://nedbatchelder.com/text/unipain.html 译文地址:http://py ...

  4. Python3 学习第六弹: 迭代器与生成器

    1> 迭代器 迭代的意思类似递归一般,不断地对一个对象做重复的操作.来看个例子: class Fibs: def __init__(self): self.last = self.now = 1 ...

  5. Python3 学习第五弹:类与面向对象

    对于面向对象总是要提到,万物皆对象.好似博大精深的感觉. 接下来一起看看python的面向对象的例子 创建一个对象 class Person: type = 'person' def __init__ ...

  6. python3学习笔记三(数字类型,字符串)

    数字(Number)类型 有四种类型:整数.布尔型.浮点数和复数 int整数 bool布尔,如True float浮点数,1.23 complex复数,1+2j.1.2+2.3j 内置的 type() ...

  7. Python3 学习第十三弹: 模块学习五之pickle与json

    对于python来说,这两个模块是十分实用的两个模块,以一种简单的方法用于储存数据实例. pickle模块 提供用来储存Python各种数据序列化存储 # 原来的cPickle已经在python3中与 ...

  8. css学习の第三弹—盒模型的创建和使用

    一.css盒模型: 元素分类: 块状元素.内联元素(又叫行内元素)和内联块状元素. >>常用的块状元素有: <div>.<p>.<h1>...<h ...

  9. Python3 学习第十一弹: 模块学习四之sys库

    sys模块 提供一些与python解释器关系紧密的变量和函数 1> argv 命令行参数 通过命令行可以向python传输参数 2> exit([arg]) 程序退出,可以返回给命令行一个 ...

随机推荐

  1. MySQL中的配置参数interactive_timeout和wait_timeout(可能导致过多sleep进程的两个参数)

    1)interactive_timeout:参数含义:服务器关闭交互式连接前等待活动的秒数.交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的 ...

  2. Hadoop集群中pig工具的安装过程记录

    在Hadoop环境中安装了pig工具,安装过程中碰到了一些问题,在此做一下记录:   主要安装流程参考:http://www.cnblogs.com/yanghuahui/p/3768270.html ...

  3. 剑指offer--面试题5

    到现在为止,看过的书+代码有一定量了,并且也参加了个比赛,给自己的总体感觉:编程需要的是灵活的头脑,书里的东西只是讲个规则.思想,其实际实现可以千差万别!   潜在的规则+灵活的思维 = 程序! 在做 ...

  4. 转载一个不错的Scrapy学习博客笔记

    背景: 最近在学习网络爬虫Scrapy,官网是 http://scrapy.org 官方描述:Scrapy is a fast high-level screen scraping and web c ...

  5. 【redis】03list类型

    list类型 redis的list类型是一个链表结构,他的主要功能是push.pop.获取一个范围的所有值等等一些操作, 咱们push什么意思,push是不是相当于咱们php里面的array_push ...

  6. How to define Servlet filter order of execution using annotations

    If we define Servlet filters in web.xml, then the order of execution of the filters will be the same ...

  7. [转载]Spring Autowire自动装配介绍

    转自: http://www.cnblogs.com/zhishan/p/3190757.html 在应用中,我们常常使用<ref>标签为JavaBean注入它依赖的对象.但是对于一个大型 ...

  8. java基础知识回顾之java Thread类学习(九)--wait和notify区别

    wait和sleep区别:  相同点:调用wait,sleep方法都可以是线程进入阻塞状态,让出cpu的执行权. 不同点:1.sleep必须指定时间,但是wait方法可以指定时间,也可以不指定时间. ...

  9. Oracle 体系结构2 - 实例和数据库

    Oracle最最基本的概念: 实例和数据库 实例就是oracle进程和一块共享内存, 数据库就是静态的文件,如datafile, log file, redo logfile, control fil ...

  10. NET权限系统开源项目

    http://www.cnblogs.com/yubaolee/p/OpenAuth.html http://www.cnblogs.com/guozili/p/3496265.html Sereni ...