Python--异常处理
- <font color=blue>一、异常
- <font color=blue>二、异常处理语句
- <font color=blue>1、try...except语句
- <font color=blue>2、try...except...else语句
- <font color=blue>3、try...except...finally语句
- <font color=blue>4、raise语句抛出异常
- <font color=blue>三、assert断言
一、异常
程序运行过程中出现的错误,统称为“异常”。
二、异常处理语句
常见异常类型
1、try…except语句
语法格式:
try:
block1:
except [ExceptionName [as alias]]:
block2
参数说明:
block1:可能出现错误的代码块
ExceptionName [as alias]:可选参数,用于指定要捕获的异常。其中,ExceptionName 表示要捕获的异常名称,如果在其右侧加上as alias则表示为当前的异常指定一个别名,通过该别名,可以记录异常的具体内容。
block2:进行异常处理的代码块。这里可以输出固定的提示信息,也可以通过别名输出异常的具体内容。
在使用try…except捕获异常时,如果在except后面不指定异常名称,则表示捕获全部异常。
例1:
try:
num = int(input('请输入一个非零整数:'))
res = 10 / num
except:
print('输入的数值错误!')
#输出
请输入一个非零整数:0
输入的数值错误!
例2:
string = 'hello'
try:
ch = string[8]
except IndexError as e: #为IndexError异常起一个别名
print(e) #打印异常的具体内容
#输出
string index out of range
2、try…except…else语句
try…except…else语句是在try…except语句的基础上加了else子句,用于指定当try语句块中没有发现异常时要执行的语句块。当try语句中发现异常时,该语句块中的内容将不被执行。
例如:
try:
num = int(input('请输入一个非零整数:'))
res = 10 / num
except:
print('输入的数值错误!')
else:
print(f"10除{num}的结果是{res}")
#输出
请输入一个非零整数:2
10除2的结果是5.0
3、try…except…finally语句
语法格式:
try:
block1:
except [ExceptionName [as alias]]:
block2
finally:
block3
try…except…finally语句中无论是否有异常,都会执行block3语句块。
#有异常产生
string = 'hello'
try:
ch = string[8]
except IndexError as e: # 未捕获到异常,程序直接报错
print(e)
finally:
print('无论是否有异常,我都会执行!')
#输出
string index out of range
无论是否有异常,我都会执行!
#无异常产生
string = 'hello'
try:
ch = string[1]
except IndexError as e: # 未捕获到异常,程序直接报错
print(e)
finally:
print('无论是否有异常,我都会执行!')
#输出
无论是否有异常,我都会执行!
4、raise语句抛出异常
如果某个函数或方法产生异常,但不想再当前函数或方法中处理这个异常,则可以使用raise语句在函数或者方法中抛出异常。
语法格式:
raise [ExceptionName [reason]]
ExceptionName [reason]为可选参数,用于指定抛出的异常名称以及异常信息的相关描述。如果省略,就会把当前的错误原样抛出。
try:
a = input("输入一个数:")
#判断用户输入的是否为数字
if(not a.isdigit()):
raise ValueError("a 必须是数字")
print('Test') #raise后面的语句不会执行
except ValueError as e:
print("引发异常:",repr(e))
#输出
输入一个数:k
引发异常: ValueError('a 必须是数字')
三、assert断言
语法格式:
assert expression [, arguments]
def test(num):
value = int(num)
assert value > 0, "a超出范围" #使用asset断言抛出异常
print(value)
#捕获异常
try:
test(-1)
except AssertionError as e:
print(e)
#输出
a超出范围