广州Python,Java小班周末班培训
薯条老师在广州做Python和Java的小班培训,一个班最多10人,学员的平均就业薪资有11K。不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。培训的课程有Python爬虫,Python后端开发,Python办公自动化,Python大数据分析,Python量化投资,Python机器学习,Java中高级后端开发。授课详情请点击:http://chipscoco.com/?cate=6
17.2.1 try,except语句
在Python中使用try语句来声明可能会产生异常的代码块,使用except语句来捕获异常,并对异常进行处理。
try,except 的基本语法:
注意:语法结构中的[]符号表示可选参数的意思,即非必须的选项。
try: # 可能发生异常的代码块,须注意代码的缩进规则 pass except [Exception [as identifier]]: # (1) except语句负责捕获异常,后面带一个异常类型 # (2) except语句后不带任何参数时,等同于except Exception # (3) as是一个可选选项,参数identifier表示捕获到的异常对象名 pass else: # else语句是可选的,用来定义不发生异常时所执行的代码 passPython解释器是线性执行的,会先执行try子句,如果Python解释器没有抛出异常,所有except子句都会被忽略。 如果try子句的某一行代码发生了异常,那么try子句中余下的部分将被忽略。抛出的异常类型一旦与except语句后面的异常类型匹配,except子句下面的代码将会执行。
异常类型匹配是指抛出的异常对象e与except语句指定的异常类型E,在执行isinstance(e,E)时为True。即异常对象e所属的异常类型与E是同一类型或者是异常类型E的子类。
代码实例:
# __desc__ = 使用try,except来捕获和处理异常 try: print(hellopython) except NameError: print("name error occurred") else: print("no exception") """ 程序的输出: name error occurred """如果抛出的异常类型不与任何except子句匹配,那么这个异常将会沿着调用链不断上传 ,直到异常被处理,否则会异常终止程序。现在定义两个简单的函数,来演示这样的异常处理过程:
# __desc__ = 异常沿着调用链不断上传 def throw_name_error(): # 变量hellopython未定义,会抛出NameError的错误异常 print(hellopython) def holyshit(): # 在函数holyshit中调用throw_name_error函数 # 由于throw_name_error函数未对异常进行捕获,所以会上传至函数holyshit中 throw_name_error() if __name__ == "__main__": try: holyshit() # 在函数holyshit中未对异常进行捕获,会继续上传至函数holyshit的调用方 except Exception as e: # 对从函数holyshit中抛出的异常进行处理 # 可以直接输出异常的信息 print(e) """ 程序的输出: name 'hellopython' is not defined """使用except语句捕获异常时,可以传递一个元祖类型的参数,在元祖中指定需捕获的异常类型。Python解释器会按从左到右的顺序来进行类型匹配,一旦匹配就会停止匹配过程。
基本的语法结构:
try: # 可能发生异常的代码块,须注意代码的缩进规则 pass except (exception1,exception2) as identifier: # as是一个可选选项,参数identifier表示捕获到的异常对象名 pass传递元祖类型的参数进行多个异常类型的匹配,等价于使用多个单行的except语句进行异常捕获:
try: # 可能发生异常的代码块,须注意代码的缩进规则 pass except exception1: pass except exception2: pass代码实例:
# __desc__ = 使用try,except来捕获和处理异常 try: # 直接输出未定义的变量hellopython,会抛出NameError print(hellopython) except (IndentationError, Exception, NameError) as e: print(e) else: print("no exception") """ (1) 程序抛出的NameError对象与IndentaionError显然不匹配,所以会 继续往右进行匹配 (2) NameError对象与Exception类型匹配吗?答案是肯定的,因为Exception是 NameError的基类。所以尽管程序抛出的NameError对象与except子句中的NameError 类型完全匹配,但由于Exception的顺序排在其前面,所以会优先匹配Exception。 (3)程序的输出为: name 'hellopython' is not defined """在实际开发中,应按就近原则将子类排在最前面,将父类排在末尾。
17.2.2 raise语句
Python同时提供了raise语句,通过raise语句可以手动地抛出指定的异常。raise语句的基本语法:
raise Exception(what) [from Exception2]参数Exception表示对应的异常类型,what是传递给Exception类型的可选描述性参数,用来对异常信息进行描述。from是可选项,用来表示raise语句抛出的异常类型,由from语句中的Exception2异常所引发。
raise语句中的from子句,可从其字面意思进行理解,from有"从哪里来","来自于"的意思,表示raise语句中的异常来自于哪一个异常。from后面的参数为None时,会忽略异常的上下文信息。
代码实例:
# __desc__ = 异常沿着调用链不断上传 def just_throw_error(): # 通过raise语句来手动地抛出ValueError的异常 raise ValueError("just throw value error") if __name__ == "__main__": try: just_throw_error() except (NameError, ValueError, Exception) as e: print(e) """ 程序的输出: name 'hellopython' is not defined """raise语句后面不带任何参数时,会重新抛出当前已抛出的异常:
# __desc__ = 异常沿着调用链不断上传 def just_throw_error(): # 通过raise语句来手动地抛出ValueError的异常 raise ValueError("just throw value error") def just_rethrow_error(): # 捕获从just_throw_error函数中抛出的异常 try: just_throw_error() except (NameError, ValueError): # 如果抛出的异常为NameError或ValueError,就重新抛出 raise if __name__ == "__main__": try: just_rethrow_error() except Exception as e: print(e) """ 程序的输出: just throw value error """
17.2.3 finally语句
在Python中使用finally语句来定义程序的清理操作, 同else子句一样,finally语句也是可选的。 finally语句与else语句的区别在于,不论是否发生异常都会执行finally子句中的代码。finally语句必须是异常处理的最后一个语句:
# __desc__ = 使用try,except来捕获和处理异常 try: # 手动抛出ValueError raise ValueError("raise value error manually") except (IndentationError, NameError, ValueError) as e: print(e) else: # 未抛出异常时才会执行else语句下的代码 print("no exception") finally: # 不论是否发生异常,都会执行finally语句下的代码 print("finally") """ 程序的输出: raise value error manually finally """
17.2.4 知识要点
(1) 在Python中通过try语句来声明可能会发生异常的代码块,用except语句来对异常进行捕获和处理。(2) 异常处理中的else语句用来定义未发生异常时的程序处理逻辑(3) finally语句主要用来定义程序的清理操作,不论是否发生异常,都会执行finally语句下的代码。
17.2.5 最具实力的小班培训
薯条老师在广州做Python和Java的小班培训,一个班最多10人。不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。打算参加小班培训的同学,必须遵守薯条老师的学习安排,认真做作业和项目。把知识学好,学扎实,那么找到一份高薪的工作就是很简单的一件事。
(1) Python后端工程师高薪就业班,月薪11K-18K,免费领取课程大纲
(2) Python爬虫工程师高薪就业班,年薪十五万,免费领取课程大纲
(3) Java后端开发工程师高薪就业班,月薪11K-20K, 免费领取课程大纲
(4) Python大数据分析,量化投资就业班,月薪12K-25K,免费领取课程大纲
扫码免费领取Python学习资料: