python中错误和异常分析try/except语句解析

定义:

错误:错误是语法或者逻辑上的,语法导致不能被解释器解释报错,例如运行python的时候经常碰到的语法报错SyntaxError: invalid syntax即属于错误。

异常:语法正确的时候,运行时依旧可能发生错误。运行的时候检测到的被称作为异常。例如除0报错ZeroDivisionError: division by zero就是异常。

处理过程:

try/except语句:

异常以及处理分为两个过程,首先是解释器引发异常随后执行异常时的处理代码,使用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语句:

这种结构是在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中的是否发生异常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 类,可以直接继承,或者间接继承。这些情况比较复杂,具体情况需要具体代入分析

猜你喜欢

转载自blog.csdn.net/qq_34729246/article/details/107869013