欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python学习笔记(十)——异常及异常的处理

程序员文章站 2022-04-07 16:55:03
...

本节包括异常的定义,异常的捕获,异常的传递及抛出异常。

1. 异常

异常:程序在运行时,如果Python解释器遇到一个错误,会停止程序的执行,并且会提示一些错误的信息。
程序停止执行并且提示错误信息这个动作就是抛出异常
所以:
通过异常捕获可以针对突发事件做集中的处理,从而保证程序的稳定性和健壮性。

2. 捕获异常

如果对某些代码的执行不能确定是否正确,可以使用**try:**来捕获异常
语法:

try:
	尝试执行的代码
except:
	出现错误的处理
	
描述:当try中的代码出现错误,则执行except中的代码

代码演示:

try:
    num = int(input("请输入一个整数"))
except:
	# 错误的处理代码
    print("请输入正确的整数")

结果:
请输入一个整数a
请输入正确的整数

2.1 针对错误类型来捕获异常

异常有很多类型,需要对不同类型的异常,做出不同的响应。

语法:

try:
	#尝试执行的代码
	pass
except 错误类型1:
	#对应的代码处理
except 错误类型2:
	#对应的代码处理
except Exception as result:
	print("未知错误%s"% result)

捕获未知错误:

语法
except Exception as result:
		print("未知错误%s"% result)

当出现异常时,最后一行错误信息的第一个单词,就是错误类型。

示例:

try:
    num = int(input("请输入一个整数"))
    result = 8/num
    print(result)
except ZeroDivisionError:
    print("分母不能为0")
except ValueError:
    print("请输入正确的整数")


try:
    num = int(input("请输入一个整数"))
    result = 8/num
    print(result)
# except ZeroDivisionError:
#     print("分母不能为0")
except ValueError:
    print("请输入正确的整数")
except Exception as res:
    print("未知错误%s"%res)

请输入一个整数0
未知错误division by zero

2.2 异常捕获的完整语法:

try:
	#尝试执行的代码
	pass
except 错误类型1:
	#对应的代码处理
except 错误类型2:
	#对应的代码处理
except Exception as result:
	print("未知错误%s"% result)
else:
	#没有异常才会执行的代码
finally:
	#无论是否有异常,都会执行的代码

代码演示:

try:
    num = int(input("请输入一个整数"))
    result = 8/num
    print(result)
# except ZeroDivisionError:
#     print("分母不能为0")
except ValueError:
    print("请输入正确的整数")
except Exception as res:
    print("未知错误%s"%res)
else:
    print("程序正常执行")
finally:
    print("无论是否异常,都会执行")

3. 异常的传递

当函数/方法执行出现异常,会将异常传递给函数/方法的调用一方
如果传递到主函数,仍然没有异常处理,程序才会被终止。
因此:
可以在主函数中,增加异常捕获

def demo1():
    return int(input("请输入一个整数"))
def demo2():
    return demo1()
try:
    print(demo2())
except Exception as result:
    print("未知错误%s" %result)

请输入一个整数d
未知错误invalid literal for int() with base 10: 'd'

4. 抛出raise异常

1.创建Exception异常对象
2.使用raise抛出异常

def input_password():
    pw = input("请输入密码")
    if len(pw) >= 8:
        return pw
    print("主动抛出异常")
    # 1.创建异常对象-可以使用错误信息字符串作为参数
    ex = Exception("密码长度不够")
    #2.主动抛出异常
    raise ex
#3.捕获异常
try:
    print(input_password())
except Exception as result:
    print(result)