龙空技术网

「万能Python」-16-错误异常

墨客moke 328

前言:

而今同学们对“python输入异常处理”可能比较注意,各位老铁们都想要剖析一些“python输入异常处理”的相关知识。那么小编同时在网上汇集了一些有关“python输入异常处理””的相关资讯,希望大家能喜欢,小伙伴们快快来了解一下吧!

今日分享歌曲

歌名:有你的快乐

歌手:王若琳

音量:42%

作为 Python 初学者,在刚学习 Python 编程时,经常会看到一些报错信息,在前面我们没有提及,这章节我们会专门介绍。

借助异常处理机制,甚至在程序崩溃前也可以做一些必要的工作,例如将内存中的数据写入文件、关闭打开的文件、释放分配的内存等。

Python 异常处理机制会涉及 try、except、else、finally 这 4 个关键字,同时还提供了可主动使程序引发异常的 raise 语句。

Python语法错误

语法错误,也就是解析代码时出现的错误。当代码不符合 Python 语法规则时,Python解释器在解析时就会报出 SyntaxError 语法错误,与此同时还会明确指出最早探测到错误的语句。

print "Hello,Moke"

Python3.X中 上面示例中这种语法是错误的,所有语法错误提示:SyntaxError

Python运行时错误

运行时错误,即程序在语法上都是正确的,但在运行时发生了错误。

a=1/0print(a)

在 Python 中,把这种运行时产生错误的情况叫做异常(Exceptions)。

当一个程序发生异常时,代表该程序在执行时出现了非正常的情况,无法再执行下去。默认情况下,程序是要终止的。如果要避免程序退出,可以使用捕获异常的方式获取这个异常的名称,再通过其他的逻辑代码让程序继续运行,这种根据异常做出的逻辑处理叫作异常处理。

那么,应该如何捕获和处理异常呢?

Python 中,用try except语句块捕获并处理异常,其基本语法结构如下所示:

try:    可能产生异常的代码块except [ (Error1, Error2, ... ) [as e] ]:    处理异常的代码块1except [ (Error3, Error4, ... ) [as e] ]:    处理异常的代码块2except  [Exception]:    处理其它异常

从try except的基本语法格式可以看出,try 块有且仅有一个,但 except 代码块可以有多个,且每个 except 块都可以同时处理多种异常。

try except 语句的执行流程如下:

首先执行 try 中的代码块,如果执行过程中出现异常,系统会自动生成一个异常类型,并将该异常提交给 Python 解释器,此过程称为捕获异常。

当 Python 解释器收到异常对象时,会寻找能处理该异常对象的 except 块,如果找到合适的 except 块,则把该异常对象交给该 except 块处理,这个过程被称为处理异常。如果 Python 解释器找不到处理异常的 except 块,则程序运行终止,Python 解释器也将退出。

def getHTMLText(url):    headers = {    'user-agent': random.choice(ua_list1)    }    print(headers)    try:        r=requests.get(url,headers=headers,timeout=10)        r.raise_for_status() #如果状态不是200,引发HTTPerror        r.encoding = r.apparent_encoding        return r.text    except:        return "产生异常"

上面定义了一个request库获取html页面文本信息,如果get过程正常则返回文本信息,如果异常则返回“产生异常”提醒。

事实上,不管程序代码块是否处于 try 块中,甚至包括 except 块中的代码,只要执行该代码块时出现了异常,系统都会自动生成对应类型的异常。但是,如果此段程序没有用 try 包裹,又或者没有为该异常配置处理它的 except 块,则 Python 解释器将无法处理,程序就会停止运行;反之,如果程序发生的异常经 try 捕获并由 except 处理完成,则程序可以继续执行。

else引入

在原本的try except结构的基础上,Python 异常处理机制还提供了一个 else 块,也就是原有 try except 语句的基础上再添加一个 else 块,即try except else结构。

使用 else 包裹的代码,只有当 try 块没有捕获到任何异常时,才会得到执行;反之,如果 try 块捕获到异常,即便调用对应的 except 处理完异常,else 块中的代码也不会得到执行。

try:    result = 20 / int(input('请输入除数:'))    print(result)except ValueError:    print('必须输入整数')except ArithmeticError:    print('算术错误,除数不能为 0')else:    print('没有出现异常')print("继续执行")
finally

Python 异常处理机制还提供了一个 finally 语句,通常用来为 try 块中的程序做扫尾清理工作。

注意,和 else 语句不同,finally 只要求和 try 搭配使用,而至于该结构中是否包含 except 以及 else,对于 finally 不是必须的(else 必须和 try except 搭配使用)。

finally 语句的功能是:无论 try 块是否发生异常,最终都要进入 finally 语句,并执行其中的代码块。

finally 块的强大还远不止此,即便当 try 块发生异常,且没有合适和 except 处理异常时,finally 块中的代码也会得到执行。

基于 finally 语句的这种特性,在某些情况下,当 try 块中的程序打开了一些物理资源(文件、数据库连接等)时,由于这些资源必须手动回收,而回收工作通常就放在 finally 块中。

总结

勇敢追求梦想,不断挑战自我,不轻易放弃,坚持到底,就一定能够实现自己的理想和目标。

标签: #python输入异常处理