异常
在写程序时可能会遇到错误,整个程序就会崩溃,但我们希望程序能检测错误并继续执行。这可以使用try-except
语句来处理,把可能出错的语句放在try
子句中,如果发生错误,则转到except
子句。
try:
print(2 / 0)
except ZeroDivisionError:
print('Error: Invalid argument.')
这个代码处理了除数为0的异常。在代码except
语句中提到了ZeroDivisionError
异常,此外还有其它异常,详见python文档。
如果要捕获多个异常时,可以用元组的形式写在同一个exception
语句里;如果要捕获全部的异常信息,则可以写成Exception
,如
except (ValueError, AttributeError, KeyError):
except Exception:
except
语句开始执行后,不会返回try
子句执行错误语句后面的句子。
也可以通过raise
语句抛出自己的异常。通常,使用try-except
语句调用函数,raise
语句写在这个函数中,如
def func(one):
if one == 1:
raise Exception('ONE')
print(one)
try:
func(2)
func(1)
except Exception as err:
print('An exception happened: ' + str(err))
捕获异常时的as
语句可以获取异常信息。
try-except
语句后还可写finally
语句,无论try
子句是否成功,都会执行finally
语句中的内容,如
try:
a = opne('name.txt')
except exception as e:
print(e)
finally:
a.close()
无论文件是否被打开,最终都会被关闭。问价打开的的异常处理还可简化为上下文管理器形式上下文管理器形式。
断言
断言是一个完整性检查,确保代码没有做什么明显错误的事情。
s = 'abc'
assert s == 'abc'
s = 'xyz'
assert s == 'abc'
上面代码希望确定字符串s
是abc
。如果检查失败,则抛出异常。
在运行python时,传入-O
选项可以禁用断言。