赞
踩
错误:错误是语法或者逻辑上的,语法导致不能被解释器解释报错,例如运行python的时候经常碰到的语法报错SyntaxError: invalid syntax即属于错误。
异常:语法正确的时候,运行时依旧可能发生错误。运行的时候检测到的被称作为异常。例如除0报错ZeroDivisionError: division by zero就是异常。
异常以及处理分为两个过程,首先是解释器引发异常随后执行异常时的处理代码,使用try/except语句
例如:
try:
x = int(intput('请输入一个数字:'))
except ValueError:
print('输入的不是数字')
以此例子来看try/except执行过程:先执行try中的语句,如果没有发生异常,就忽略except子句,如果在执行try子句过程中发生错误,则try中的语句会被忽略,然后看发生的异常类型是否和except之后的异常错误名称是否一致,如果一致则执行对应的except之后的子句,一个try语句可能包含多个except语句,用来处理碰到的不同的异常,每次只会触发一个异常,也就是只有一个except分支会被执行,
格式例如:
try:
retval = float(obj)
except ValueError:
retval = 'could not convert non-number to float'
except TypeError:
retval = 'object type cannot be converted to float'
想要做到一个except语句处理多个异常出现的情况则可以将except之后的多个异常组成一个元组,格式例如:except (RuntimeError, TypeError, NameError): 这种格式就表明此时出现RuntimeError,或者是TypeError,或者NameError都会激发此异常处理过程。
格式例如:
try:
retval = float(obj)
except (ValueError, TypeError):
retval = 'argument must be a number or numeric string'
这种结构是在try/except之后加了else语句,其中else必须放在except之后,else中的句子是在try中语句没有发生任何异常的时候才会执行。
格式例如:
try:
f = open(arg, 'r')
except IOError:
print('cannot open', arg)
else:
print(arg, 'has', len(f.readlines()), 'lines')
f.close()
无论前面try中的是否发生异常finally语句中的代码都会执行,语法例如:
try-except-else-finally流程:
try:
with open('file.log') as file:
read_data = file.read()
except FileNotFoundError as fnf_error:
print(fnf_error)
finally:
print('这句话,无论异常是否发生都会执行。')
有些异常由程序执行期间的错误引发,程序员在编写某些api的时候希望遇到错误的输入时触发异常,python提供了一种机制(raise语句)让程序员可以明确的将某些错误出发这些异常
raise语句比较灵活,通常的语法格式如下:
raise [Exception [, args [, traceback]]]
其中Exception是触发的异常的名字,args为可选参数,traceback,同样是可选的(实际上很少用它)
以下实例如果 x 大于 5 就触发异常:
x = 10
if x > 5:
raise Exception('x 不能大于 5。x 的值为: {}'.format(x))
执行以上代码会触发异常:
Traceback (most recent call last): File "test.py", line 3, in <module> raise Exception('x 不能大于 5。x 的值为: {}'.format(x)) Exception: x 不能大于 5。x 的值为: 10
你可以通过创建一个新的异常类来拥有自己的异常。异常类继承自 Exception 类,可以直接继承,或者间接继承。这些情况比较复杂,具体情况需要具体代入分析
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。