9. 异常

基于网络课程《Python全栈开发专题》 记录笔记,请支持正版课程

raise抛出异常

# raise Exception('我是一个异常')
# raise ArithmeticError('这是一个和数值有关的异常')

# from boto.codedeploy.exceptions import InvalidRoleException
# raise InvalidRoleException(2, '异常信息')

'''
一些常见的异常:
Exception       所有异常类的基类
AttributeError  属性引用或赋值失败时抛出的异常
OSError         当操作系统无法执行任务时抛出的异常
KeyError        在使用序列中不存在的键值时抛出的异常
IndexError      在使用序列中不存在的索引时抛出的异常
NameError       在找不到名字(变量)时抛出异常     
SyntaxError     在代码为错误形式时触发
TypeError       类型错误
ValueError      在使用不合适的值时抛出异常
ZeroDivisionError  0作为除数时抛出异常
'''

自定义异常类

class MyException(Exception):
    pass

n = 10
if n < 20:
    raise MyException('我的异常')

捕捉异常

'''
try:
    pass
except:
    pass
'''

x = None
while True:
    try:
        if x == None:
            x = int(input('分子:'))
        y = int(input('分母:'))
        print('x / y = {}'.format(x/y))
        break
    except:
        print('分母不能为0!')  

捕获多个异常 / else / finally

class MyException1(Exception):
    pass
class MyException2(Exception):
    pass

i = int(input('输入一个数字:'))
try:
    if i == 1:
        raise MyException1()
    elif i == 2:
        raise MyException2()
except MyException1:
    print('exception 1')
except MyException2:
    print('exception 2')
else:
    print('else')
finally:
    print('finally')

捕获异常对象

class MyException(Exception):
    pass

try:
    raise MyException()
except MyException as e:
    print(e)

练习1:

class StartMobilException(Exception):
    pass

import random

class Mobil:
    def start(self):
        value = random.randint(1, 100)
        if value < 50:
            raise StartMobilException('开机错误')

mobile = Mobil()

try:
    mobile.start()
except StartMobilException as e:
    print(e)

练习2

class JC:
    def compute(self, n):
        if n == 1:
            return 1
        elif n <= 0:
            raise JCException('阶乘数字应大于0')
        else:
            return n * self.compute(n - 1)

class JCException(Exception):
    pass

jc = JC()
n = int(input('输入阶乘数字:'))

try:    
    print(jc.compute(n))
except JCException as e:
    print(e)

你可能感兴趣的:(9. 异常)