08-异常
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了08-异常,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3144字,纯文字阅读大概需要5分钟。
内容图文
![08-异常](/upload/InfoBanner/zyjiaocheng/1003/f6d6e3d1723c4807a6b4086e66e708db.jpg)
异常是什么
- Python使用异常对象来表示异常状态,并在遇到错误时引发异常。异常对象未被处理(或捕获)时,程序将终止并显示一条错误消息(traceback)。
raise语句
- 将类作为参数时,将自动创建一个实例。
raise Exception
raise Exception("huperdive orverload")
# 添加了错误消息hyperdrive overload。
一些内置的异常类
Exception
AttributeError # 引用属性或给它赋值失败时引发
OSError # 操作系统不能执行指定的任务(如打开文件)时引发,有多个子类
IndexError
KeyError
NameError
SyntaxError
TypeError
ValueError
ZeroDivisionError
自定义的异常类
class SomeCustomException(Exception):
pass
捕获异常
- 异常比较有趣的地方是可对其进行处理,通常称之为捕获异常。
- 可使用try/except
- 异常从函数向外传播到调用函数的地方。
- 如果在这里也没有被捕获,异常将向程序的最顶层传播
不用提供参数
- 可使用raise … from …语句来提供自己的异常上下文,也可使用None来禁用上下文。
多个 except 子句
一箭双雕
try:
x = int(input('Enter the first number: '))
y = int(input('Enter the second number: '))
print(x / y)
except (ZeroDivisionError, TypeError, NameError):
print('Your numbers were bogus ...')
捕获对象
try:
x = int(input('Enter the first number: '))
y = int(input('Enter the second number: '))
print(x / y)
except (ZeroDivisionError, TypeError) as e:
print(e)
一网打尽
try:
x = int(input('Enter the first number: '))
y = int(input('Enter the second number: '))
print(x / y)
except:
print('Something wrong happened ...')
- 更好的选择是使用except Exception as e并对异常对象进行检查。
- 让不是从Exception派生而来的为数不多的异常成为漏网之鱼.
万事大吉时
- 在有些情况下,在没有出现异常时执行一个代码块很有用。给try/except语句添加一个else子句。
try:
print('A simple task')
except:
print('what? Something went wrong?')
else:
print('Ah...It went as planned.')
while True:
try:
x = int(input('Enter the first number: '))
y = int(input('Enter the second number: '))
value = x / y
print('x / y is', value)
except:
print('Invalid input. Please try again.')
else:
break
# 在这里,仅当没有引发异常时,才会跳出循环
最后
- 最后,还有finally子句,可用于在发生异常时执行清理工作。
- 这个子句是与try子句配套的。
x = None
try:
x = 1 / 0
finally:
print('Cleaning up ...')
del x
try:
1 / 0
except NameError:
print('Unknow variable')
else:
print('That went well')
finally:
print('Cleaning up')
- finally子句非常适合用于确保文件或网络套接字等得以关闭
异常和函数
- 如果不处理函数中引发的异常,它将向上传播到调用函数的地方
- 如果在那里也未得到处理,异常将继续传播,直至到达主程序(全局作用域)。
异常之禅
- 相比于使用if/else,使用try/except语句更自然,也更符合Python的风格。
不那么异常的情况
- 如果你只想发出警告,指出情况偏离了正轨,可使用模块warnings中的函数warn
from warnings import warn
warn("I've got a bad feeling about this.")
- 警告只显示一次。如果再次运行最后一行代码,什么事情都不会发生。
- 如果其他代码在使用你的模块,可使用模块warnings中的函数filterwarnings来抑制你发出的警告(或特定类型的警告),并指定要采取的措施,如"error"或"ignore"。
from warnings import filterwarnings
filterwarnings("ignore")
filterwarnings("error")
- 可根据异常来过滤掉特定类型的警告。
from warnings import filterwarnings
from warnings import warn
warn("This function is really old...", DeprecationWarning)
filterwarnings("ignore", category=DeprecationWarning)
内容总结
以上是互联网集市为您收集整理的08-异常全部内容,希望文章能够帮你解决08-异常所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。