python:异常

一、exception

(鱼C)python标准异常总结

http://bbs.fishc.com/thread-45814-1-1.html

常谈到的:AssertionError、AttributeError、IndexError(序列中索引值超出实际范围)、KeyError(在字典中查找一个不存在的关键字,用捕获或者get()方法)、NameError(尝试访问不存在的变量)、OSError(操作系统的异常,下边有好多子类FileNotFoundError)、OverflowError、SyntaxError(语法错误)、TypeError(类型异常)、ZeroDivisionError(除数为0异常)

二、检测异常并处理

异常检测可以使用try,有两种形式

try-except语句

try:
    检测范围
except Exception[as reason]:
    出现异常(Exception)后的处理代码

try:
    f = open('wobushiwenjian.txt')
    print(f.read())
    f.close()
except OSError:
    print('文件出错了')         #这种会打印“文件出错了”,但不会打印为什么出错
或者使用as
except OSError as reason:
    print('文件出错了:' + str(reason)) #注意这里使用str!返回:文件出错了: Errno 2] No such file or directory: 'ss'

可以使用多个except

  1 file_name = input('please filename for open:')
  2 try:
  3     sum = 1 + '1'
  4     f = open(file_name)
  5     print(f.read())
  6     f.close()
  7 except OSError as reason:
  8     print('文件出错了\n错误原因是:' + str(reason))
  9 except TypeError as reason:
 10     print('类型出错了' + str(reason)

上栗中当有OSError、TypeError之外的异常时,不能被捕获,照样会挂掉;所以直接使用

except:
    print('出错了')

写法会捕获 所有异常,也会捕获到ctrl + c强制关闭程序  (KeyboardError),因此不推荐这么做

注意:try里边的语句前边的语句出现了异常,后边的语句不会被执行

还可以这样写

except (OSError, TypeError):
    print('出错了')

这种情况可以加as reason吗?不知道哎,自己去测一下!
try-finally语句

try:
    检测范围
except Exception[as reason]:
    出现异常(Exception)后的处理代码
finally: 
    无论如何都会被执行的代码

如果文件异常出现在文件成功打开之后,关闭文件之前,是有问题的!此时就需要把f.close()放到finally中!

raise语句

代码自己引发出一个异常!

用法:raise ZeroDivisionError('除数为零了')

>>> raise
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
RuntimeError: No active exception to reraise
>>> 1 / 0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
>>> raise ZeroDivisionError
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError
>>> raise ZeroDivisionError('除数为零了')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: 除数为零了
>>> 








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值