python基础学习四——控制结构与异常

xiaoxiao2021-02-28  119

一、条件分支 将if…else缩减为单一行的条件表达式:

w = 100 + (10 if a >5 else 0)

一般使用的时候最好用圆括号括起来,防止误操作。 二、循环 1.while循环

while boolean_expression: while_suite else: else_suite

如果while循环正常终止,则执行else,如果while被break或者抛出异常或者return,则不会执行else语句中的suite。如果suite中出现continue语句,则会重新返回到循环起点开始执行。

def list_find(lst,target): index = 0 while index < len(lst): if lst[index] = target: break index = index + 1 else: index = -1 return index

2.for in 循环

for experssion in iterable: for_suite else: else_suite

通常experssion或者是一个单独的变量,或者是一个变量序列,一般是以元组形式给出,如果将元组或列表应用于experssion,则其中每一数据项都会被拆分到表达式的项。如果在for_suite中调用了continue,则会重新返回到循环起点运行,循环终止则运行else_suite。如果被break、异常、return,则不会运行else_suite。

def list_find(lst,target): for index,x in enumerate(lst): if x == target: break else: index = -1 return index

三、捕获与产生异常 异常的捕获是使用try…except…模块实现的,其通常语法如下:

try: try_suite except exception_group1 as variable1: except_suite1 except exception_group2 as variable2: except_suite2 else: else_suite finally: finally_suite

其中至少要包含一个except块,如果try模块正常执行,则下来执行else模块,如果抛出异常,则不执行else模块,如果有finally模块,则最终总是运行finally模块。else跟finally模块可选。 如果try的suite中出现异常,则每个except分支会顺序尝试执行,如果该异常与某个异常组(元组)匹配,则相应的suite得以执行。要与异常组进行匹配,异常必须与组中列出的异常类型(或其中的一个)一致,或与组中列出的异常类型的子类一致。 例如,如果在字典中产生KeyError异常,那么包含Exception类的第一个except分支将匹配这一异常,因为KeyError是Exception的非直接子类,如果except分支没有Exception异常,但存在一个LookupError子类,那么KeyError异常也可以匹配,因为KeyError也是Exception的子类,如果哪个分支含有KeyError也将匹配。总是匹配第一个except分支,如果匹配上,则接下来的分支不执行。因此,以下是一个不正常的实例:

try: x = d[5] except LookupError as err: print(err) except KeyError as err1: print(err1) else: print('No error') finally: print('end!')

由上例,在使用多个except分支时,我们必须对其排序,从最具针对性的异常(在异常系中最底层)到最通常的异常(异常系中最顶层)。 直接写成except:也是可能的,即为不设置异常组,写成这种风格的异常块将捕获任意异常,包括BaseException等非Exception异常。 如果没有哪个except块匹配到异常,python会沿着调用栈回溯,并寻找适当的异常处理程序。如果找不到合适的异常处理程序,则程序将终止,并在该控制台上打印该异常以及回溯信息。 如果没有exception产生,那么可选的else模块将被执行。在所有任意情况下——没有发生异常,发生异常并被处理,发生异常回溯到调用栈等,finally模块都将被执行。如果没有异常产生或者异常被某个except捕获,则最后运行finally模块。如果异常没有被捕获,则运行完finally模块后,回溯到调用栈处理。 try…except…finally控制流如下: 四、产生异常 异常提供了一种改变控制流的有效方法,我们可以使用内置的异常,或创建自己的异常,以便产生我们所需要的异常并对其进行处理。有以下产生异常的方法:

raise exception(args) raise exception(args) from original_excepton raise

使用第一种语法时,指定的异常应该为内置的异常,或者继承自Exception的自定义异常。如果给定一些文本为该异常的参数,那么在捕获到该异常并打印时,这些文本应该作为输出信息。 使用第二种语法时,即没有指定异常时,raise将重新产生当前活跃的异常——如果没有就会产生一个TypeError。 实例如下:

try: raise KeyError('name') except KeyError as err: print(err) else: print('no exception') finally: print('stop') out: 'name' stop

五、自定义异常

class exceptionName(baseException):pass
转载请注明原文地址: https://www.6miu.com/read-57968.html

最新回复(0)