【Python】异常处理try+except和断言assert

原文作者:我辈李想
版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。


文章目录

  • 前言
  • 一、常见用法
  • 二、内置异常类
  • 三、else和finally
  • 四、自定义异常
    • 1.异常类
    • 2.抛出异常
  • 五、断言assert


前言

在 Python 中,异常是一种表示程序执行期间发生错误的方式。当出现异常时,程序会停止执行,并且根据异常类型决定是否终止程序。
为了避免程序终止,我们可以使用异常处理来捕获和处理异常。在 Python 中,我们使用 try-except 语句来实现异常处理。try 块包含可能会引发异常的代码,而 except 块用于处理异常。


一、常见用法

try:
    num1 = int(input("请输入一个数字:"))
    num2 = int(input("请输入另一个数字:"))
    result = num1 / num2
    print("结果为:", result)
except ZeroDivisionError:
    print("除数为零错误!")
except ValueError:
    print("输入的不是数字!")

在这个例子中,我们使用 try-except 语句来处理可能会引发异常的除法操作。如果 num2 为零,则会引发 ZeroDivisionError 异常,如果输入的不是数字,则会引发 ValueError 异常。根据具体情况,我们使用两个 except 块来处理这两种异常。

二、内置异常类

Python中有许多内置异常(built-in exceptions),它们都是预定义的异常类型,可以在代码中被触发和处理。以下是一些常见的内置异常:

  1. ValueError:当传递给函数或方法的参数类型不正确或者参数的值不合法时,会引发此异常。

  2. TypeError:当使用了错误的数据类型或数据类型不匹配时,会引发此异常。

  3. IndexError:当尝试访问序列中不存在的元素时,会引发此异常。

  4. KeyError:当尝试使用字典中不存在的键时,会引发此异常。

  5. ZeroDivisionError:当尝试除以零时,会引发此异常。

  6. NameError:当尝试访问不存在的变量时,会引发此异常。

  7. IOError:当尝试读取不存在的文件或文件不可读时,会引发此异常。

  8. AttributeError:当尝试访问不存在的对象属性时,会引发此异常。

  9. NotImplementedError:当尝试调用尚未实现的方法或函数时,会引发此异常。

  10. KeyboardInterrupt:当用户中断程序的执行时,会引发此异常。

以上是常见的内置异常类型,但 Python 还有许多其他类型的异常。

三、else和finally

除了使用 except 块来处理异常,我们还可以使用 finally 块来执行一些必要的清理操作。无论是否出现异常,finally 块中的代码都会被执行。

示例:

try:
    num = int(input("请输入一个数字:"))
    result = 10 / num
    print("结果为:", result)
except ZeroDivisionError:
    print("除数为零错误!")
else:
    print("可以获得num值",num )

示例:

try:
    file = open("test.txt","w")
    file.write("Hello World")
except:
    print("文件操作失败")
finally:
    file.close()

在这个例子中,我们使用 finally 块来输出程序执行结束的信息,以确保无论是否出现异常,都会输出这个信息。

我们常用的with open(‘xx.txt’,‘w’) 打开文件实现的就是类似finally的功能。

四、自定义异常

1.异常类

定义自己的异常处理其实很简单,继承内置 Exception 类就可以。

class MyCustomException(Exception):
    def __init__(self, code , message):
        self.code = code 
        self.message = message

    def __str__(self):
        return (self.code ,self.message)

2.抛出异常

from xx import MyCustomException

try:
    raise MyCustomException(12305,"This is a custom exception.")
except MyCustomException as e:
    print(e)

在上面的示例中,我们使用 raise 语句触发自定义异常,并使用 except 语句捕获它。由于我们在自定义异常类中定义了 str 方法,因此 print 语句将打印自定义异常消息。

五、断言assert

Python 中的断言 assert 是一个调试工具,用于在开发和调试过程中检查代码。当使用 assert 时,我们可以在代码中插入一些检查语句,以确保代码的正确性。

如果断言的条件为 False,则会引发 AssertionError 异常,并且程序会停止执行。如果断言的条件为 True,则程序会继续执行,就像断言语句不存在一样。

以下是一个简单的示例,在这个示例中,我们使用 assert 语句来检查代码中的条件:

x = 5
assert x > 3, "x 应该大于 3"

在上面的代码中,我们使用断言来检查变量 x 是否大于 3。如果 x 的值小于或等于 3,则会引发 AssertionError 异常,并显示指定的错误消息。

断言语句非常有用,在开发和调试过程中,可以用它们来检查代码的正确性,并在错误发生时快速定位问题。但请注意,在部署代码之前,请务必禁用或删除所有断言语句。

你可能感兴趣的:(Python开始入门,python,开发语言)