python异常处理二

上一篇 / 下一篇  2017-09-16 19:50:43 / 个人分类:python

异常参数:

一个异常可以带上参数,可作为输出的异常信息参数。通过except语句来捕获异

常的参数

Ø异常参数接收的异常值通常包含在异常的语句中。在元组的表单中变量可以接收

一个或者多个值。元组通常包含错误字符串,错误数字,错误位置。

触发异常

我们可以使用raise语句自己触发异常,一旦执行raise语句,程序就会被终止。

 

#coding=utf-8

def exceptionTest(num):

    if num < 0:

        raise Exception("Invalid num")

    else:

        print num

    if num == 0:

        raise ZeroDivisionError("integer division or modulo by zero")

#调用函数,触发异常  可以循环执行,动态输入一个值

try:

    exceptionTest(-12)

except  Exception,e:

    print e

exceptionTest(12)

 

exceptionTest(0)

 

F:\python\异常>python触发异常.txt

Invalid num

12

0

Traceback (most recent call last):

  File "触发异常.txt", line 16, in <module>

    exceptionTest(0)

  File "触发异常.txt", line 8, in exceptionTest

    raise ZeroDivisionError("integer division or modulo by zero")

ZeroDivisionError: integer division or modulo by zero

自定义异常

通过创建一个新的异常类,程序可以创建它们自己特定的异常。自定义异常都需要继承异常基类(Exception类),当然也可以继承具体的异常类(比如RuntimeError),通过直接或间接的方式。

 

1可以造玩具的模板(类),它可以接受不同的参数来造出不同的玩具(构造函数)

2造玩具的模板传递具体的参数(比如:大、中,小),可以生成不同大小的玩具(实例化)

 

#coding=utf-8

class Networkerror(RuntimeError):

#重写默认的__init__()方法,

#抛出特定的异常信息

    def __init__(self, value):

        self.value = value

#触发自定义的异常

try:

    raise Networkerror("Bad hostname")

except Networkerror, e:

print "My exception occurred, value:", e.value

 

F:\python\异常>python自定义异常.txt

My exception occurred, value: Bad hostname

 

#传进去输入的字符串的长度和默认长度大小,如果输入的长度小于默认长度的话就抛出异常,现在抛出的异常相当于是对类的实例化,传参数,便于在下边捕获异常时打印对应的值

 

class ShortInputException(Exception):

    '''A user-defined exception class.'''

    def __init__(self, length, atleast):

        Exception.__init__(self)

        self.length = length

        self.atleast = atleast

try:

    s = raw_input('Enter something --> ')

    if len(s) < 3:

       #如果输入的内容长度小于3,触发异常

        raise ShortInputException(len(s), 3)

except EOFError:

    print '\nWhy did you do an EOF on me?'

except ShortInputException, x:

    print 'ShortInputException: The input was of length %d, \

was expecting at least %d' % (x.length, x.atleast)

else:

    print 'No exception was raised.'

 

F:\python\异常>python自定义异常.txt

Enter something --> ty

ShortInputException: The input was of length 2, \was expecting at least 3

 

F:\python\异常>python自定义异常.txt

Enter something --> jjj

No exception was raised.

 

F:\python\异常>python自定义异常.txt

Enter something --> ty

ShortInputException: The input was of length 2, was expecting at least 3

 

F:\python\异常>python自定义异常.txt

Enter something --> l

ShortInputException: The input was of length 1, was expecting at least 3

异常抛出机制

1、如果在运行时发生异常,解释器会查找相应的处理语句(称为handler)。

2、要是在当前函数里没有找到的话,它会将异常传递给上层的调用函数,看看那里能不能处理。

3、如果在最外层(全局“main”)还是没有找到的话,解释器就会退出,同时打印出traceback以便让用户找到错误产生的原因。

注意:

虽然大多数错误会导致异常,但一个异常不一定代表错误,有时候它们只是一个警告,有时候它们可能是一个终止信号,比如退出循环等

 

#encoding=utf-8

try:

    for i in range(10):

        for j in range(10):

            if i==3 and j==3:

                raise

            print i,j

except:

print "exit loop!"

 

F:\python\异常>python跳出多重循环.txt

0 0

0 1

0 2

0 3

0 4

0 5

0 6

0 7

0 8

0 9

1 0

1 1

1 2

1 3

1 4

1 5

1 6

1 7

1 8

1 9

2 0

2 1

2 2

2 3

2 4

2 5

2 6

2 7

2 8

2 9

3 0

3 1

3 2

exit loop!

Python标准异常

异常名称描述

BaseException所有异常的基类

SystemExit解释器请求退出

KeyboardInterrupt用户中断执行(通常是输入^C)

Exception常规错误的基类

StopIteration迭代器没有更多的值

GeneratorExit生成器(generator)发生异常来通知退出

StandardError所有的内建标准异常的基类

ArithmeticError所有数值计算错误的基类

FloatingPointError浮点计算错误

OverflowError数值运算超出最大限制

ZeroDivisionError(或取模)(所有数据类型)

AssertionError断言语句失败

AttributeError对象没有这个属性EOFError没有内建输入,到达EOF标记

EnvironmentError操作系统错误的基类

IOError输入/输出操作失败

OSError操作系统错误

WindowsError系统调用失败

ImportError导入模块/对象失败

LookupError无效数据查询的基类

IndexError序列中没有此索引(index)

KeyError映射中没有这个键

MemoryError内存溢出错误(对于Python解释器不是致命的)

NameError未声明/初始化对象(没有属性)

UnboundLocalError访问未初始化的本地变量

ReferenceError弱引用(Weak reference)试图访问已经垃圾回收了的对象

RuntimeError一般的运行时错误

NotImplementedError尚未实现的方法

SyntaxError Python语法错误

IndentationError缩进错误

TabError Tab和空格混用

SystemError一般的解释器系统错误

TypeError对类型无效的操作

ValueError传入无效的参数

UnicodeError Unicode相关的错误

UnicodeDecodeError Unicode解码时的错误UnicodeEncodeError Unicode编码时错误

UnicodeTranslateError Unicode转换时错误

Warning警告的基类

DeprecationWarning关于被弃用的特征的警告

FutureWarning关于构造将来语义会有改变的警告

OverflowWarning旧的关于自动提升为长整型(long)的警告

PendingDeprecationWarning关于特性将会被废弃的警告

RuntimeWarning可疑的运行时行为(runtime behavior)的警告

SyntaxWarning可疑的语法的警告

UserWarning用户代码生成的警告


TAG:

 

评分:0

我来说两句

我的栏目

日历

« 2024-04-19  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 14470
  • 日志数: 20
  • 建立时间: 2016-10-19
  • 更新时间: 2018-01-27

RSS订阅

Open Toolbar