一、错误和异常
Python有两种错误很容易辨认:语法错误和异常。
1.语法错误
2.异常以不同的类型出现,这些类型都作为信息的一部分打印出来: 如 ZeroDivisionError,NameError 和 TypeError。 二、异常处理
1.
import sys
try:
f = open('myfile.txt')
s = f.readline()
i = int(s.strip())
#第一种异常
except OSError:
print("OS error: {0}".format(OSError))
#第二种异常
except ValueError:
print("Could not convert data to an integer.")
#第三种异常可以忽略异常的名称,它将被当作通配符使用
except:
print("Unexpected error:", sys.exc_info()[0])
#没有出现异常时最后执行
else:
print("没有出现异常")
#最后必须执行
finally:
print("最后必须执行")
2.第三种异常可以忽略异常的名称,它将被当作通配符使用,sys.exc_info()[0]可以获得异常的类型
except:
print("Unexpected error:", sys.exc_info()[0])
3.一次性处理多个异常
except (RuntimeError, TypeError, NameError):
pass
**4。使用traceback(推荐),自动收集异常信息
import traceback
try :
a = 1 / 0
except:
traceback.print_exc()
三、抛出异常
raise 唯一的一个参数指定了要被抛出的异常。它必须是一个异常的实例或者是异常的类(也就是 Exception 的子类)。
如果你只想知道这是否抛出了一个异常,并不想去处理它,那么一个简单的 raise 语句就可以再次把它抛出。
try:
raise NameError('HiThere')
except NameError:
print('An exception flew by!')
raise 四、自定义异常
你可以通过创建一个新的exception类来拥有自己的异常。异常应该继承自 Exception 类,或者直接继承,或者间接继承
1.定义
class MyError(Exception):
def __init__(self, value):
self.value = value
def __str__(self):
return repr(self.value)
2.使用
try:
raise MyError(2*2)
except MyError as e:
print('My exception occurred, value:', e.value)
五、定义清理行为
finally:
print('Goodbye, world!')
六、预定义的清理行为
with open("myfile.txt") as f:
for line in f:
print(line, end="")
文章信息
- 本文作者:zhangxue
- 本文链接:https://lucksnow1989.github.io/article/13.脚本语言/python/基本语法/9异常处理.html
- 版权声明:本文为本人原创文章,遵循 CC 4.0 BY-NC-SA版权协议,转载请附上原文出处链接和本声明。