python基础学习四——控制结构与异常
来源:互联网 发布:使命召唤 ol命运数据 编辑:程序博客网 时间:2024/06/07 11:27
一、条件分支
将if…else缩减为单一行的条件表达式:
w = 100 + (10 if a >5 else 0)
一般使用的时候最好用圆括号括起来,防止误操作。
二、循环
1.while循环
while boolean_expression: while_suiteelse: 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_suiteelse: 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_suiteexcept exception_group1 as variable1: except_suite1except exception_group2 as variable2: except_suite2else: else_suitefinally: 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_exceptonraise
使用第一种语法时,指定的异常应该为内置的异常,或者继承自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
- python基础学习四——控制结构与异常
- Python学习(八)------- 控制结构和异常处理
- Python学习笔记(四)——运算符与流程控制
- 非程序员的编程之旅——Python基础篇(4)流程控制与异常处理
- java学习——java基础(四)之异常
- Python学习笔记3—程序的控制结构
- Python基础学习四
- Python学习基础四
- Python基础学习<四>
- python基础学习四
- python基础学习(四)
- python学习_控制结构
- Python 基础 ——异常与错误处理
- Python基础学习篇—异常处理机制
- python基础学习总结——方法、控制语句
- Python——异常基础
- Python基础——异常
- Python与自然语言处理(四):TensorFlow基础学习2
- C++之尽量不要重载&&,||或者,运算符(7)---《More Effective C++》
- QML之TabBar
- JavaWeb技术内幕学习笔记二:java I/O工作机制基础知识
- 隐藏的BUG——SetDisplayMode()
- CodeForces
- python基础学习四——控制结构与异常
- char* char[] 区别
- iOS 键盘框架IQKeyboardManager使用
- 使用js实现读取csv文件内容解析到html页面中
- 菜鸟开始学习汇编--序章
- 【English】八月英语总结
- S5PV210的地址映射
- Intelligent Parking Building
- 对于银行股的一些思考