1 异常处理
try:
<执行代码>
except <异常名称[, 异常名称2]> [as 异常昵称]:
<发生该异常时执行的代码>
except (RuntimeError, TypeError, NameError) [as 异常昵称]:
<发生该异常时执行的代码>
else:
<没有异常时执行的代码>
finally:
<不管有没有异常都会执行的代码>
try:
b = 123
except IndexError as e:
print('IndexError错误', e)
except Exception as e:
print('未知错误', e)
else:
print('没有异常时执行的代码。')
finally:
print('任何情况下都会执行的代码')
# 输出:
没有异常时执行的代码。
任何情况下都会执行的代码
try:
a = ['test1', 'test2']
a[3]
# 输出:
IndexError错误 list index out of range
任何情况下都会执行的代码
2 抛出异常:raise
raise语法格式如下:
raise [Exception [, args [, traceback]]]
x = 5
if x > 3:
raise Exception('错误了。。。')
# 输出:
Traceback (most recent call last):
File "D:/python视频课程/凡Python/Day7/异常处理.py", line 10, in <module>
raise Exception('错误了。。。')
Exception: 错误了。。。
3 断言
msg = input('# ')
assert msg is str # 与用if语句的效果类似,但if太low
print('hey, msg is str')
# 输出:
assert msg is str
AssertionError
4 用户自定义异常
通过创建一个新的异常类来创建自己的异常。异常类继承自 Exception 类,可以直接继承,或者间接继承,例如:
x = 5
if x > 3:
raise Exception('错误了。。。')
class MyError(Exception):
def __init__(self, msg):
self.msg = msg
def __str__(self):
return repr(self.msg)
# return 'str'
try:
raise MyError('Database connected error')
except MyError as e:
print('出错了', e)
5 定义清理行为
finally 用途:
一些对象定义了标准的清理行为,无论系统是否成功的使用了它,一旦不需要它了,那么这个标准的清理行为就会执行。
for line in open("test.txt"):
print(line, end="")
以上这段代码的问题是,当执行完毕后,文件会保持打开状态,并没有被关闭。
关键词 with 语句就可以保证诸如文件之类的对象在使用完之后一定会正确的执行他的清理方法:
with open("myfile.txt") as f:
for line in f:
print(line, end="")