python 异常处理小结 try except raise assert
Posted bitcarmanlee
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 异常处理小结 try except raise assert相关的知识,希望对你有一定的参考价值。
1.try-except
try except组合是用来处理异常的一对黄金搭档,python中也不例外。可以看个简单的例子:
def t1():
try:
a, b = 1.0, "2.0"
c = a / float(b)
print("c is: ", c)
except ValueError as err:
print("b must be digit!")
except ZeroDivisionError as err:
print("b is zero!")
except Exception as ex:
print("there is unexpect exception!")
上面两个数相除的例子,首先,如果b的值是"abc",会抛出一个ValueError的异常:could not convert string to float: 'abc'
,该异常被except ValueError as err
捕获。其次,如果b的值是"0.0",会抛出一个ZeroDivisionError的异常:ZeroDivisionError: float division by zero
,该异常被except ZeroDivisionError as err:
捕获。最后,如果还有其他异常,则被最后一句except语句捕获。
2.raise
上面的例子中,都是被动接受处理异常。自然我们也可以主动抛出异常,这个时候就用到了raise关键字。
相比被动接受处理异常,主动抛出异常的好处自然很多。
1.使用方式更为灵活,可以根据我们的业务场景,业务需求,来定义虽然代码语法上准确无误,但不满足我们要求的情况为异常情况。
2.可以自定义异常报错信息,方便我们发现与排查问题。
raise常见的用法有以下三种
1.只有一个raise关键字,可以引发当前捕获的异常。
def t1():
try:
x = "x"
x = float(x)
except:
raise
执行这段代码,会有如下输出:
ValueError: could not convert string to float: 'x'
2.raise + 异常类信息,表示引发异常的类型。
def t1():
try:
x = "x"
x = float(x)
except:
raise ValueError()
执行上述代码,有如下输出:
ValueError
如果将上面的代码稍作修改:
def t1():
try:
x = "x"
x = float(x)
except:
raise ZeroDivisionError()
上面的代码则会输出如下:
ValueError: could not convert string to float: 'x'
During handling of the above exception, another exception occurred:
...
ZeroDivisionError
上面的例子,float(x)转化的时候,系统抛出了一个ValueError的异常,但是因为我们raise的时候,指定的是ZeroDivisionError,所以还会抛出来一个ZeroDivisionError。
3.raise + 异常类型 + 描述信息
def t1():
x = "a"
if not x.isdigit():
raise ValueError("x must be digit!")
上面代码运行,则会输出如下信息:
ValueError: x must be digit!
3.try-except捕获raise异常
raise出来异常以后,我们经常还用try except对异常进行捕获
def t1():
try:
x = "a"
if not x.isdigit():
raise ValueError("x must be a num!")
except Exception as ex:
print("there is exception: ", repr(ex))
上面的代码运行结果如下
there is exception: ValueError('x must be a num!')
4.assert
assert是用来表明某个条件为真,当assert语句失败返回False的时候,会抛出AssertionError。
看个简单的实例
def t3():
a = 2
assert a > 5
print(a ** 2)
此时代码会抛出异常
AssertionError
如果将a赋值为10,代码会输出100。
assert本质上还是raise一个AssertionError,所以我们也可以使用try-catch来捕获这个异常,而不是让这段code直接崩溃。
def sqrt(x):
try:
assert x >= 0
num = math.sqrt(x)
print("num is: ", num)
except:
print("if you want to solve sqrt num, x must be bigger or equal zero!")
sqrt(4)
sqrt(-4)
num is: 2.0
if you want to solve sqrt num, x must be bigger or equal zero!
以上是关于python 异常处理小结 try except raise assert的主要内容,如果未能解决你的问题,请参考以下文章