最近在写代码的时候,很多时候需要考虑各种情况,如果仅仅使用if,会很麻烦,于是想到了python 异常处理和断言,用于判断函数进程。、
异常处理 try
程序在运行的时候,如果python解释器遇到一个错误,会停止程序的执行,
并且提示一些错误的信息,这就是异常
我们在程序开发的时候,很难将所有的特殊情况都处理,
通过异常捕获可以针对
突发事件做集中处理,从而保证程序的健壮性和稳定性
在程序开发中,如果对某些代码的执行不能确定(程序语法完全正确)
可以增加try来捕获异常
try这个关键字来捕获异常
try:尝试执行的代码
except:出现错误的处理 finally:无论是否发生异常,都会执行final部份
try:
print('try...')
r = 10 / int('a')
print('result:', r)
except ValueError as e:
print('ValueError:', e)
except ZeroDivisionError as e:
print('ZeroDivisionError:', e)
finally:
print('finally...')
print('END')
try
语句的工作原理如下:
- 首先,执行 try 子句 (
try
和except
关键字之间的(多行)语句)。 - 如果没有触发异常,则跳过 except 子句,
try
语句执行完毕。 - 如果在执行
try
子句时发生了异常,则跳过该子句中剩下的部分。 如果异常的类型与except
关键字后指定的异常相匹配,则会执行 except 子句,然后跳到 try/except 代码块之后继续执行。 - 如果发生的异常与 except 子句 中指定的异常不匹配,则它会被传递到外部的
try
语句中;如果没有找到处理程序,则它是一个 未处理异常 且执行将终止并输出如上所示的消息。
try
语句可以有多个 except 子句 来为不同的异常指定处理程序。 但最多只有一个处理程序会被执行。 处理程序只处理对应的 try 子句 中发生的异常,而不处理同一 try
语句内其他处理程序中的异常。 except 子句 可以用带圆括号的元组来指定多个异常。
常见异常:
try
语句还有一个可选子句,用于定义在所有情况下都必须要执行的清理操作。
如果存在 finally
子句,则 finally
子句是 try
语句结束前执行的最后一项任务。不论 try
语句是否触发异常,都会执行 finally
子句。以下内容介绍了几种比较复杂的触发异常情景:
- 如果执行
try
子句期间触发了某个异常,则某个except
子句应处理该异常。如果该异常没有except
子句处理,在finally
子句执行后会被重新触发。 -
except
或else
子句执行期间也会触发异常。 同样,该异常会在finally
子句执行之后被重新触发。 - 如果
finally
子句中包含break
、continue
或return
等语句,异常将不会被重新引发。 - 如果执行
try
语句时遇到break
,、continue
或return
语句,则finally
子句在执行break
、continue
或return
语句之前执行。 - 如果
finally
子句中包含return
语句,则返回值来自finally
子句的某个return
语句的返回值,而不是来自try
子句的return
语句的返回值。
assert(断言)
Python assert(断言)用于判断一个表达式,在表达式条件为 false 的时候触发异常。
断言可以在条件不满足程序运行的情况下直接返回错误,而不必等待程序运行后出现崩溃的情况,例如我们的代码只能在 Linux 系统下运行,可以先判断当前系统是否符合条件。
语法格式如下:
assert expression
等价于:
if not expression: raise AssertionError
assert 后面也可以紧跟参数:
assert expression [, arguments]
等价于:
if not expression: raise AssertionError(arguments)