【目录】
文章目录
- 1. try...except语法解析
- 2. 程序异常
- 3. except的4种使用方式
- 3.1 单独的except
- 3.2 except + 异常名称
- 3.3 except 异常类型 as 别名
- 3.4 except (异常类型1,异常类型2) as 别名
- 4. 总结
【正文】
1. try…except语法解析
try[traɪ]:尝试。
except[ɪkˈsept]:把…排除在外。
try...except
语句是Python中的异常处理机制,用于捕获和处理异常。
【作用】
在程序发生异常时执行特定的代码块,以避免程序崩溃或产生不可预料的结果。
【语法】
try:
block1
except ExceptionName as alias:
block1
block[blɒk]:代码块。
ExceptionName:异常名称。
as:作为,如同。
alias [ˈeɪlɪəs]:别名。
try
和 except
是关键字。
注意关键字后面需要跟英文冒号:
。
注意英文冒号:
后面的代码块需要有4
个空格的缩进。
【参数说明】
-
block1
:表示可能出现错误的代码块。 -
ExceptionName
:可选参数,代表用户要捕获的异常名称。 -
as alias
可选参数,表示给前面的的异常指定一个别名,alias
代表别名。 -
如果在
ExceptionName
右侧加上as alias
,则表示为当前的异常指定一个别名,通过该别名,可以记录异常的具体内容。 -
block2
:表示进行异常处理的代码块。这里可以输出固定的提示信息,也可以通过别名输出异常的具体内容。
【温馨提示】
在使用try...except
语句捕获异常后,当程序出错时,输出错误信息后,程序会继续执行。
【语法框架1】
try:
# 可能会发生异常的代码块
except :
# 处理异常类型的代码块(可以是提示性语句)
【语法框架2】
try:
# 可能会发生异常的代码块
except 异常名称 :
# 处理异常类型的代码块(可以是提示性语句)
【语法框架3】
try:
# 可能会发生异常的代码块
except 异常类型 as 别名:
# 输出异常的具体内容
print(别名)
【语法框架4】
try:
# 可能会发生异常的代码块
except (异常类型1,异常类型2,异常类型3) as 别名:
# 输出异常的具体内容
print(别名)
可能会发生异常的代码块如果存在多个异常情况时,在except
语句后面使用一对英文圆括号( )
将可能出现的异常名称括起来,多个异常名称之间使用英文逗号,
分隔。
2. 程序异常
编程中程序不能正常运行的原因通常有2种:
-
一是程序有语法错误。
-
二是程序语法没有问题,但使用者操作不当或输入的数据不符合要求。
下面这段代码的作用是接收用户输入的两个整数,并输出它们相除得到的结果。
【代码示例】
# input接收到的数据为字符串类型,需要用int函数将其转换成整数类
a = int (input("请输入第1个整数:"))
b = int (input("请输入第2个整数:"))
# 计算a除以b
result = a/b
print("结果为:",result)
【终端输出】
结果为: 0.5
操作者输入正常时,终端显示的结果如下图所示:
我粗心大意在终端输入时,给第2个整数b输入的值为0,终端显示的结果如下图所示:
大家注意这段代码是没有语法错误的,报错是因为给变量b赋的值为0。
【报错提示】
File "D:\安迪笔记\1.基础语法\95-异常\95.py", line 5, in <module>
result = a/b
ZeroDivisionError: division by zero
运行代码,程序报 ZeroDivisionError: division by zero
这个错误。
-
line 5
表示第5行代码有错误。 -
ZeroDivisionError
是一个异常的名称,除数为0时会引发该错误。 -
division by zero
表示被零除
。
ZeroDivisionError
是一个Python的异常,用于表示除法运算中出现除数为零的情况。
当我们在程序中执行除法运算时,如果除数为零,就会抛出ZeroDivisionError异常。
这个异常的出现通常是由于代码逻辑错误或者错误的输入导致的。
上面的代码报错就是属于使用者操作不当或输入的数据不符合要求
导致的程序异常。
出现这样的报错,我们可以使用Python提供的异常处理机制。
可以用try...except
语句捕获出现的异常,让程序继续运行。
except的有4种使用方式,我们依次来看。
3. except的4种使用方式
3.1 单独的except
try
的意思是尝试,我们把可能出现异常的代码放到try中,注意try后面有英文冒号:
,冒号后有4个空格的缩进。
try :
# input接收到的数据为字符串类型,需要用int函数将其转换成整数类
a = int (input("请输入第1个整数:"))
b = int (input("请输入第2个整数:"))
# 计算a除以b
result = a/b
print("结果为:",result)
如果try后面的代码没有问题,则程序正常输出结果。
如果try后面的代码出现异常,则程序执行except后面的代码。
except后面接进行异常处理的代码块。
【代码示例】
try :
# input接收到的数据为字符串类型,需要用int函数将其转换成整数类
a = int (input("请输入第1个整数:"))
b = int (input("请输入第2个整数:"))
# 计算a除以b
result = a/b
print("结果为:",result)
except :
print("输入有问题,程序不能正常输出结果。")
【终端输出】
第1种情形是except
后面什么参数也不加,回车后跟上一句提示性语句,这句语句你可以结合实际随意编写。
print("输入有问题,程序不能正常输出结果。")
该语句是一句提示信息,在这里它就是进行异常处理的代码块。
3.2 except + 异常名称
【代码示例】
try :
# input接收到的数据为字符串类型,需要用int函数将其转换成整数类
a = int (input("请输入第1个整数:"))
b = int (input("请输入第2个整数:"))
# 计算a除以b
result = a/b
print("结果为:",result)
except ZeroDivisionError:
print("输入有问题,程序不能正常输出结果。")
【终端输出】
except ZeroDivisionError:
第2种情形是except
后面加上ZeroDivisionError
。
ZeroDivisionError是一个异常名称,编写其它程序时这里需要根据实际情况替换成其它的异常名称。
Python中的异常名称有固定的写法,后面会学。
观察上述2种情况的输出结果,发现有没有异常名称
输出的结果都是一样的。
但对于程序员来说有异常名称可以有一个提醒的作用。
3.3 except 异常类型 as 别名
【代码示例】
try :
# input接收到的数据为字符串类型,需要用int函数将其转换成整数类
a = int (input("请输入第1个整数:"))
b = int (input("请输入第2个整数:"))
# 计算a除以b
result = a/b
print("结果为:",result)
except ZeroDivisionError as e:
print(e)
【终端输出】
except ZeroDivisionError as e:
print(e)
-
except
是关键字。 -
ZeroDivisionError
是异常名称,这里可以替换成你觉得会发生的异常名称。 -
as
是关键字,不能更改。 -
e
是别名,它记录了异常的具体内容,这里的e
你可以根据你自己的喜好来命名。 -
:
注意最后要加英文冒号哦。 -
print(e)
输出程序记录的异常内容,根据该内容我们可以排查是什么地方发生了异常。
这里程序记录的异常为division by zero
,表示除数为0
。
看到异常原因我们下次在终端输入的时候不要给除数赋值为0就能避免这个异常。
3.4 except (异常类型1,异常类型2) as 别名
【代码示例】
# input接收到的数据为字符串类型,需要用int函数将其转换成整数类
a = int (input("请输入第1个整数:"))
b = int (input("请输入第2个整数:"))
# 计算a除以b
result = a/b
print("结果为:",result)
除了除数为0的异常,上面的代码还可能有其它的异常。
我因为输入错误,在给b赋值时不小心将0
输错成了p
,终端输出结果如下图所示:
【终端输出】
【报错提示】
Traceback (most recent call last):
File "D:\安迪笔记\1.基础语法\95-异常\95.py", line 3, in <module>
b = int (input("请输入第2个整数:"))
ValueError: invalid literal for int() with base 10: 'p'
运行上面的代码,程序报 ValueError: invalid literal for int() with base 10: 'p'
这个错误。
-
line 3
表示第3行有语法错误。 -
ValueError
是一个异常的名称,表示传入的值错误。 -
invalid literal for int() with base 10: 'p'
表示用户输入的字符串是’p’,而int()函数无法将这个字符串解析为一个有效的整数。
invalid[ɪnˈvælɪd]:无效的。
literal [ˈlɪtərəl]:文本,常量。
base [beɪs]:基础。
invalid literal for int() with base 10: 'p'
逐次翻译为使用十进制基数将字符串'p'转换为整数时出现无效的字面值
。
invalid literal for int() with base 10: 'p'
这个错误是由于我尝试将一个非数字字符转换为整数而引发的。
在Python中,int()函数用于将字符串转换为整数。
然而,当你尝试将一个无法转换为整数的字符串(如字母)传递给int()函数时,就会出现这个错误。
当b=0
的时候,程序出现ZeroDivisionError
异常。
当b=p
的时候,程序出现ValueError
异常。
我们发现同样的代码,可能存在多个异常。
在捕获异常时,如果需要同时处理多个异常我们可以采用下面的代码实现:
【代码示例】
try :
# input接收到的数据为字符串类型,需要用int函数将其转换成整数类
a = int (input("请输入第1个整数:"))
b = int (input("请输入第2个整数:"))
# 计算a除以b
result = a/b
print("结果为:",result)
except (ZeroDivisionError,ValueError) as e:
print(e)
【程序存在2个异常情况】
except (ZeroDivisionError,ValueError) as e:
print(e)
上面的程序可以捕获2个异常。
当b=0
的时候,程序捕获了ZeroDivisionError
异常,输出division by zero
。
当b=p
的时候,程序捕获了ValueError
异常,输出invalid literal for int() with base 10: 'p'
。
【b=0,程序抛出ZeroDivisionError异常】
【b=w,程序抛出ValueError异常】
4. 总结
【语法总结】
try:
# 可能会发生异常的代码块
# 1. 单独的except
except :
print("输入有问题,程序不能正常输出结果。")
# 2. except+异常名称
except ZeroDivisionError:
print("输入有问题,程序不能正常输出结果。")
# 3. except 异常名称 as 别名
except ZeroDivisionError as e:
print(e)
# 4. except (异常名称1, 异常名称1) as 别名
except (ZeroDivisionError,ValueError) as e:
print(e)
【没有try...except
语句的输出结果】
【有try...except
语句的输出结果】
【except语句中没有as的输出结果】
【except语句中有as的输出结果】