python-05

异常处理

如果在程序中引发了未进行处理的异常,程序就会因为异常而终止运行。只有在程序中捕获这些异常并进行异常并进行处理,才不会中断程序的正常运行。

try:

    <语句>     # 可能产生异常的代码

except <名字>:   # 要处理的异常

    <语句>     # 异常处理语句

import sys
try:
    f = open('头条新闻.txt')
    s = f.readline()
    i = int(s.strip())
except OSError as err:
    print('OS error: {0}'.format(err))
except ValueError:
    print('不能打开这个文件')
except:
    print('Unexpected error:', sys.exc_info()[0])
    raise

 

一个try语句可以包含多个except语句,分别用来处理特定的异常,最多只有一个分支会被执行。

处理程序将只针对对应的try子句中的异常进行处理。

s = input('请输入今日销售商品的个数:')
try:
    result = 2000/int(s)
    print('今日销售额2000除以%s的结果是:%g' % (s, result))
except ValueError:
    print('值错误, 您必须输入数值')
except ArithmeticError:
    print('算术错误,您不能输入0')
else:
    print('没有出现异常')
print('程序继续运行')

当程序中try块没有出现异常时,程序就会执行else块。

def test1(index):
    stulst = ["AAA","BBB","CCC"]
    af = open('my.txt', 'wt+')
    try:
        af.write(stulst[index])
    except:
        pass
    finally:
        af.close()
        print('文件已经关闭!')
print('没有IndexError...')
test1(1)
print('IndexError...')
test1(4)

无论异常是否发生,都要执行finally语句,可以省略except语句。

抛出异常

可以使用raise语句来抛出指定的异常,并向异常传递数据。

并且可以自定义新的异常类型。

raise [Exception [, args [, traceback]]]

Exception表示异常类型例如NameError。

args,可选参数,默认None

traceback:可选参数,存在表示跟踪异常对象

3种使用raise抛出异常的方式:

raise 异常名

raise 异常名,附加数据

raise 类名

try:
    s_age = input("请输入您的年龄:")
    age = int(s_age)
    assert 20<=age<=25, '年龄不在20-25之间'
    print('您输入的年龄在20-25之间,完全符合我们招聘要求!')
except AssertionError as e:
    print('输入年龄不正确',e)

assert被称为断言表达式。检查一个条件,如果为真就不做任何事,如果为假则会抛出AssertionError异常,并且包含错误信息。

assert<条件测试>,<异常附加数据>    #异常附加数据是可选的

class RangeError(Exception):
    def __init__(self,value):
        self.value = value
    def __str__(self):
        return self.value

raise RangeError('Range 错误!')

自定义异常类。

在定义异常类时,需要继承类Exception。

如果想在自定义的异常类中带有一定的提示信息,可以重载__init__()和__str__()这两种方法。

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值