Python基础之异常处理

简介: Python基础之异常处理

Hello,今天天小编和大家带来的是python的异常处理。

在python里我们难免会有容易发生异常的代码块,那么遇到这些代码块我们该怎么处理呢?

640.jpg

首先,异常是什么?

异常是程序执行过程中出现问题导致程序无法执行。

一般情况下,在Python无法正常处理程序时就会发生一个异常。

异常是Python对象,表示一个错误。

当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。

分类

异常的分类一共分两种,第一种是程序在逻辑上的错误或算法上的错误,第二种是运行过程中计算机的失误,例如oi,内存发生异常。


那遇到这些异常我们一般需要做什么呢?


首先第一件要做的事情就是保持镇定,不要惊慌!!!!

其次就是静下心来看报的异常是什么,如果能看懂是什么异常就自己去解决异常,如果看不懂就去百度这个异常,查找解决方法。


那一般的,对于异常它是怎么产生的呢?

异常之所以能够产生则是因为解释器读取指令的时候发现有问题,不能继续执行下去了,它便会抛出一个异常。

那对于异常系统的解释器又如何去处理呢?

如果使用了try-except块就能去处理异常,采用raise来甩出一个异常,当然对于一些其他的异常系统也会去选择忽略有或者是终止当前程序去处理异常。


那这边我们就来看一个简单的异常:

640.png

这是一行简单的异常,我们来看看程序报什么错:

640.png

异常说:hello这个变量没有被定义

那如何解决这个异常呢???

答案就是定义这个hello,把它变成一个标识符或者字符串都可以解决报错,在python里面变量不能被直接声明,都需要通过间接赋值来声明变量的。所以如果想把hello变成标识符就只能对他进行赋值例如:hello=“helloworld”,如果需要将它变成字符串就可以直接用引号引起来“hello”即可。



那下面我们来看看都有什么异常吧!


AttributeError

试图访问一个对象没有的属性,比如foo.x,但是foo没有属性x

640.png

640.png

IOError(FileNotFounderror)

输入/输出异常;基本上是无法打开文件

640.png

640.png

ImportError

无法引入模块或包;基本上是路径问题或名称错误

640.png640.png


IndentationError

语法错误(的子类) ;代码没有正确对齐

640.png

640.png

IndexError

下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]

640.png

640.png

KeyError

试图访问字典里不存在的键


640.png640.png

KeyboardInterrupt

Ctrl+C被按下

NameError

尝试访问一个没有申明的变量

(第一个hello的例子就是NameError)

SyntaxError

表示语法错误,一般是代码出现错误才会报SyntaxError错误


640.png

TypeError

传入对象类型与要求的不符合

640.png

640.png


UnboundLocalError

试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它

UnboundLocalError: local variable 'l' referenced before assignment

  1. 内部函数,不修改全局变量可以访问全局变量
  2. 内部函数,修改同名全局变量,则python会认为它是一个局部变量
  3. 在内部函数修改同名全局变量之前调用变量名称(如print sum),则引发Unbound-LocalError

正常:

报错:


等等........


异常处理的定义

python解释器检测到错误,触发异常(也允许程序员自己触发异常)

程序员编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,与异常处理有关)

如果捕捉成功则进入另外一个处理分支,执行你为其定制的逻辑,使程序不会崩溃,这就是异常处理。


异常处理的意义

python解析器去执行程序,检测到了一个错误时,触发异常,异常触发后且没被处理的情况下,程序就在当前异常处终止,后面的代码不会运行,所以你必须提供一种异常处理机制来增强你程序的健壮性与容错性 。




那么下面重点来了,如何处理异常?

捕捉异常可以使用try/except语句。

try/except语句用来检测try语句块中的错误,

从而让except语句捕获异常信息并处理。

如果不想在异常发生时结束你的程序,在try里捕获它即可。

try-except代码块:

640.png


try的工作原理是,当开始一个try语句后,python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,try子句先执行,接下来会发生什么依赖于执行时是否出现异常。

如果当try后的语句执行时发生异常,python就跳回到try并执行第一个匹配该异常的except子句,异常处理完毕,控制流就通过整个try语句(除非在处理异常时又引发新的异常)。

如果在try后的语句里发生了异常,却没有匹配的except子句,异常将被递交到上层的try,或者到程序的最上层(这样将结束程序,并打印缺省的出错信息)。

如果在try子句执行时没有发生异常,python将执行else语句后的语句(如果有else的话),然后控制流通过整个try语句。


如果你不会,只想简单的捕获可能发生的异常,你可以:

(不需要加任何参数)

try:
    正常的操作
   .....................
except:
    发生异常,执行这块代码
   .....................
else:
    如果没有异常执行这块代码

那如果需要带参数呢?

你可以通过except语句来捕获异常的参数,如下所示:

try:
    正常的操作
   ......................
except ExceptionType, Argument:
    你可以在这输出 Argument 的值...


除了以上的异常捕获之外,我们还可以强行甩出一个异常:

关键字raise

raise语法格式如下:

raise [Exception [, args [, traceback]]]

例如:

def functionName( level ):
    if level < 1:
        raise Exception("Invalid level!", level)
        # 触发异常后,后面的代码就不会再执行


那最后我们还可以自定义异常!


通过创建一个新的异常类,程序可以命名它们自己的异常。异常应该是典型的继承自Exception类,通过直接或间接的方式。

以下为与RuntimeError相关的实例,实例中创建了一个类,基类为RuntimeError,用于在异常触发时输出更多的信息。

在try语句块中,用户自定义的异常后执行except块语句,变量 e 是用于创建Networkerror类的实例。

class Networkerror(RuntimeError):
    def __init__(self, arg):
        self.args = arg

在你定义以上类后,你可以触发该异常,如下所示:

try:
    raise Networkerror("Bad hostname")except Networkerror,e:
    print e.args


今天就到这里吧!

相关文章
|
1月前
|
安全 Linux 网络安全
Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(一)
Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(一)
|
1月前
|
Python Windows 网络安全
Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(二)
Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(二)
|
3月前
|
数据库连接 Python
Python中的异常处理除了Try语句,你还会啥?
Python中的异常处理除了Try语句,你还会啥?
63 1
|
3月前
|
Python
|
2月前
|
Python
Python编程中的异常处理:理解与实践
【9月更文挑战第14天】在编码的世界里,错误是不可避免的。它们就像路上的绊脚石,让我们的程序跌跌撞撞。但是,如果我们能够预见并优雅地处理这些错误,我们的程序就能像芭蕾舞者一样,即使在跌倒的边缘,也能轻盈地起舞。本文将带你深入了解Python中的异常处理机制,让你的代码在面对意外时,依然能保持优雅和从容。
156 73
|
1月前
|
安全 Java 程序员
Python 异常处理!
本文详细介绍了Python中的异常处理,包括try、except和finally语句的使用方法。文章区分了语法错误与异常,并列举了Python中常见的异常类型,如`SyntaxError`、`TypeError`等。通过具体示例展示了如何使用try-except块捕获和处理异常,以及如何结合else和finally子句增强代码的健壮性和可读性。此外,还介绍了如何使用raise语句主动抛出异常。通过合理的异常处理,可以提高程序的可靠性与调试效率,但也可能带来性能开销和代码复杂度的增加。
37 4
|
1月前
|
IDE 开发工具 开发者
Python中的异常处理与调试技巧
【9月更文挑战第32天】在软件开发中,错误和异常是难以避免的。了解如何有效处理这些情况对于编写健壮、可靠的代码至关重要。本文将深入探讨Python中的异常处理机制,介绍如何使用try-except语句捕捉异常,以及如何利用Python的调试工具来诊断问题。通过实际示例,我们将展示如何优雅地处理异常并提高代码质量。
|
2月前
|
对象存储 索引 Python
30天拿下Python之异常处理
30天拿下Python之异常处理
31 3
|
1月前
|
安全 数据库连接 开发者
深度解析Python上下文管理器:优雅资源管理与异常处理
深度解析Python上下文管理器:优雅资源管理与异常处理
20 0
|
3月前
|
IDE 测试技术 开发工具
Python接口自动化测试框架(基础篇)-- 讨厌的异常处理
本文详细讨论了Python中的异常处理机制,包括异常捕获、异常抛出、自定义异常、环境清理,以及使用上下文管理器确保资源正确释放,最后还提到了Python的标准异常类。
37 1