当前位置:   article > 正文

【Python】异常处理:try+except和断言assert_python try except函数

python try except函数

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



前言

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


一、常见用法

try:
    num1 = int(input("请输入一个数字:"))
    num2 = int(input("请输入另一个数字:"))
    result = num1 / num2
    print("结果为:", result)
except ZeroDivisionError:
    print("除数为零错误!")
except ValueError:
    print("输入的不是数字!")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在这个例子中,我们使用 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 )
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

示例:

try:
    file = open("test.txt","w")
    file.write("Hello World")
except:
    print("文件操作失败")
finally:
    file.close()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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

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

finally的真正作用

def func():
	try:
		return 'try'
	finally:
		return 'finally'
print(func())
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
finally
  • 1
def func():
	try:
		return 'try'
	finally:
		print('finally')
print(func())
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
finally
try
  • 1
  • 2

四、自定义异常

1.异常类

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

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

    def __str__(self):
        return (self.code ,self.message)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

2.抛出异常

from xx import MyCustomException

def test():
	if 1==1:
		raise MyCustomException(12305,"This is a custom exception.")
	else:
		return 

try:
    test()
except MyCustomException as e:
    print(e)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

结果:(12305,“This is a custom exception.”)

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

五、捕获异常的详细信息

1.获取异常的堆栈跟踪

import traceback

try:
    # 可能会出现异常的代码块
except Exception as e:
    # 处理异常的代码块
    print("异常类型:", type(e).__name__)
    print("异常信息:", str(e))
    print("堆栈跟踪:")
    traceback.print_tb(e.__traceback__)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

2.获取异常发生的文件和行号

import traceback

def divide(x, y):
    try:
        result = x / y
        print("结果:", result)
    except Exception as e:
        print("异常类型:", type(e).__name__)
        print("异常信息:", str(e))
        print("异常发生的文件和行号:")
        traceback.print_exc()

divide(10, 2)
divide(10, 0)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

3.获取异常的字符串输出,写入日志

import traceback

def divide(x, y):
    try:
        result = x / y
        print("结果:", result)
    except Exception as e:
        print("异常类型:", type(e).__name__)
        print("异常信息:", str(e))
        print("异常发生的文件和行号:")
        aa = traceback.format_exc()
        print(type(aa))
        print('11')
        print(aa)

divide(10, 2)
divide(10, 0)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

六、断言assert

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

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

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

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/631608
推荐阅读
相关标签
  

闽ICP备14008679号