python异常
程序执行过程中会发生异常,影响程序的正常执行,异常也是python的对象,表示一个错误,通常的做法是捕获异常
python中捕获异常,通常使用try...except...else(finally)
常用用法,检测try语句块中的错误,使用except捕获异常并处理:
try: <语句> #运行别的代码 except <名字>: <语句> #如果在try部份引发了'name'异常 except <名字>,<数据>: <语句> #如果引发了'name'异常,获得附加的数据 else: <语句> #如果没有异常发生
- 如果当try后的语句执行时发生异常,python就跳回到try并执行第一个匹配该异常的except子句,异常处理完毕,控制流就通过整个try语句(除非在处理异常时又引发新的异常)。
- 如果在try后的语句里发生了异常,却没有匹配的except子句,异常将被递交到上层的try,或者到程序的最上层(这样将结束程序,并打印缺省的出错信息)。
- 如果在try子句执行时没有发生异常,python将执行else语句后的语句(如果有else的话),然后控制流通过整个try语句
使用try语句时,可以使用except不带异常类型(不太建议,不能区分出具体的异常信息)
try: 正常的操作 ...................... except: 发生异常,执行这块代码 ...................... else: 如果没有异常执行这块代码
当然,except也可以带上多种异常类型,如下面描述:
try: 正常的操作 ...................... except(Exception1[, Exception2[,...ExceptionN]]]): 发生以上多个异常中的一个,执行这块代码 ...................... else: 如果没有异常执行这块代码
另一个常用用法是finally语句,无论是否发生异常都会执行finally语句的内容
try: <语句> finally: <语句> #退出try时总会执行
当try语句出现异常,会立即执行finally块代码,finally块执行完毕,异常再次触发,执行excpet块代码
异常可以带上参数,可作为输出的异常信息参数,如下:
try: 正常的操作 ...................... except ExceptionType, Argument: 你可以在这输出 Argument 的值...
可以使用raise语句自己抛出异常,
raise [Exception [, args [, traceback]]]
语句中 Exception 是异常的类型(例如,NameError)参数标准异常中任一种,args 是自已提供的异常参数
def functionName( level ): if level < 1: raise Exception("Invalid level!", level) # 触发异常后,后面的代码就不会再执行
用户自定义异常
通过创建一个新的异常类,程序可以命名它们自己的异常。异常应该是典型的继承自Exception类,通过直接或间接的方式。
以下为与RuntimeError相关的实例,实例中创建了一个类,基类为RuntimeError,用于在异常触发时输出更多的信息。
在try语句块中,用户自定义的异常后执行except块语句,变量 e 是用于创建Networkerror类的实例。
class Networkerror(RuntimeError): def __init__(self, arg): self.args = arg
可以触发这个异常
try: raise Networkerror("Bad hostname") except Networkerror,e: print e.args
相关示例
(1)0不能做除数
#!/usr/bin/python # -*- coding: UTF-8 -*- try: 1 / 0 except Exception as e: '''异常的父类,可以捕获所有的异常''' print "0不能被除" else: '''保护不抛出异常的代码''' print "没有异常" finally: print "最后总是要执行我"
不要在 try 里写返回值。 try-except-else 里都是指做某事,而不是处理返回。如果在 try 里面写返回值,则 else 部分是 unreachable 的。
posted on 2018-11-27 10:36 testzhangcs 阅读(160) 评论(0) 编辑 收藏 举报