600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > python基础-异常处理try-except

python基础-异常处理try-except

时间:2019-11-30 02:50:23

相关推荐

python基础-异常处理try-except

Python目前(至少)有两种可区分的错误:语法错误和异常。异常是指在语法正确的情况下执行时引发的错误。有时候我们需要处理这些异常,就会用到try-except语句。

try-except

while True:try:x = int(input("请输入一个整数: "))y = 12 / xprint("被12除得到的结果:{}".format(y))breakexcept ValueError: #ValueError: invalid literal for int() with base 10: 'art'print("无效的数字,请重试!")except ZeroDivisionError as err: #ZeroDivisionError: division by zeroprint('除数不能为0:', err)

当出现ValueError的异常时:

请输入一个整数: art无效的数字,请重试!请输入一个整数: 12被12除得到的结果:1.0

当出现ZeroDivisionError的异常时

请输入一个整数: 0除数不能为0: division by zero请输入一个整数: 12被12除得到的结果:1.0

一个 except 子句可以将多个异常命名为带括号的元组

except (ValueError, ZeroDivisionError):pass

try-except-else

try ... except语句有一个可选的else子句,在使用时必须放在所有的except子句后面。用来编写在try子句不引发异常时必须执行的代码。

while True:try:x = int(input("请输入一个整数: "))y = 12 / xprint("被12除得到的结果:{}".format(y))#break #这个break和下面的else语句有冲突,有break下面的else语句就会执行不到except ValueError:print("无效的数字,请重试!")except ZeroDivisionError as err:print('除数不能为0:', err)#try语句中的代码不报错时执行下面的else:print("输入的整数是:{0},计算得到的结果是:{1}".format(x,y))break

程序运行如下:

请输入一个整数: 12被12除得到的结果:1.0输入的整数是:12,计算得到的结果是:1.0

try-except-else-finally

try语句有另一个可选子句,用于定义必须在所有情况下执行的清理操作。

如果在执行 try 子句期间发生了异常,该异常可由一个 except 子句进行处理。 如果异常没有被某个 except 子句所处理,则该异常会在 finally 子句执行之后被重新引发。

异常也可能在 except 或 else 子句执行期间发生。 同样地,该异常会在 finally 子句执行之后被重新引发。

如果在执行 try 语句时遇到一个 break, continue 或 return 语句,则 finally 子句将在执行 break, continue 或 return 语句之前被执行。

如果 finally 子句中包含一个 return 语句,则返回值将来自 finally 子句的某个 return 语句的返回值,而非来自 try 子句的 return 语句的返回值。

官方文档中的例子:

def divide(x, y):try:result = x / yexcept ZeroDivisionError:print("除数不能为0!")else:print("计算结果为:", result)finally:print("执行finally语句!")

参数正确:

divide(2,1)

计算结果为: 2.0执行finally语句!

除数参数输入0:

divide(2,0)

除数不能为0!执行finally语句!

参数不为整数:

divide("2","1")

Traceback (most recent call last):File "D:/code/exercise/blog/error.py", line 36, in <module>divide("2","1")File "D:/code/exercise/blog/error.py", line 28, in divideresult = x / y执行finally语句!TypeError: unsupported operand type(s) for /: 'str' and 'str'

raise

raise语句允许程序员强制发生指定的异常。用于主动抛出异常。

raise唯一的参数就是要抛出的异常。这个参数必须是一个异常实例或者是一个异常类(派生自 Exception 的类)。

raise NameError("这是一个NameError!")

执行:

Traceback (most recent call last):File "D:/code/exercise/blog/error.py", line 42, in <module>raise NameError("这是一个NameError!")NameError: 这是一个NameError!

用户自定义的异常

可以通过创建新的异常类来自定义异常。异常通常应该继承Exception类。

下面是一个selenium封装定位方法中的例子:

class LocatorTypeError(Exception):# 定位元素输入类型错误的异常passdef find(locator):if not isinstance(locator, tuple):raise LocatorTypeError("参数类型错误,locator必须是元组类型,loc = ('id','value1')")

定义的异常类,通常保持简单,可以提供一些属性,为异常提取有关错误的信息。

class IdError(Exception):#输入id错误的异常def __init__(self, input_id):self.input_id = input_iddef query_user(id):if not isinstance(id,int):raise IdError("id{}输入错误,用户id必须是整型".format(IdError(id).args))query_user("sdsadasds")

执行:

Traceback (most recent call last):File "D:/code/exercise/blog/error.py", line 47, in <module>query_user("sdsadasds")File "D:/code/exercise/blog/error.py", line 45, in query_userraise IdError("id{}输入错误,用户id必须是整型".format(IdError(id).args))__main__.IdError: id('sdsadasds',)输入错误,用户id必须是整型

python内置异常类型查阅

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。