
【目录】
try[traɪ]:尝试。
except[ɪkˈsept]:把…排除在外。
try...except语句是Python中的异常处理机制,用于捕获和处理异常。
【作用】
在程序发生异常时执行特定的代码块,以避免程序崩溃或产生不可预料的结果。
【语法】
block[blɒk]:代码块。
ExceptionName:异常名称。
as:作为,如同。
alias [ˈeɪlɪəs]:别名。
try 和 except是关键字。
注意关键字后面需要跟英文冒号: 。
注意英文冒号:后面的代码块需要有4个空格的缩进。
【参数说明】
【温馨提示】
在使用try...except语句捕获异常后,当程序出错时,输出错误信息后,程序会继续执行。
【语法框架1】
【语法框架2】
【语法框架3】
【语法框架4】
可能会发生异常的代码块如果存在多个异常情况时,在except语句后面使用一对英文圆括号( )将可能出现的异常名称括起来,多个异常名称之间使用英文逗号,分隔。
编程中程序不能正常运行的原因通常有2种:
下面这段代码的作用是接收用户输入的两个整数,并输出它们相除得到的结果。
【代码示例】
【终端输出】
操作者输入正常时,终端显示的结果如下图所示:
我粗心大意在终端输入时,给第2个整数b输入的值为0,终端显示的结果如下图所示:
大家注意这段代码是没有语法错误的,报错是因为给变量b赋的值为0。
【报错提示】
运行代码,程序报 ZeroDivisionError: division by zero 这个错误。
ZeroDivisionError是一个Python的异常,用于表示除法运算中出现除数为零的情况。
当我们在程序中执行除法运算时,如果除数为零,就会抛出ZeroDivisionError异常。
这个异常的出现通常是由于代码逻辑错误或者错误的输入导致的。
上面的代码报错就是属于使用者操作不当或输入的数据不符合要求导致的程序异常。
出现这样的报错,我们可以使用Python提供的异常处理机制。
可以用try...except语句捕获出现的异常,让程序继续运行。
except的有4种使用方式,我们依次来看。
try的意思是尝试,我们把可能出现异常的代码放到try中,注意try后面有英文冒号:,冒号后有4个空格的缩进。
如果try后面的代码没有问题,则程序正常输出结果。
如果try后面的代码出现异常,则程序执行except后面的代码。
except后面接进行异常处理的代码块。
【代码示例】
【终端输出】
第1种情形是except后面什么参数也不加,回车后跟上一句提示性语句,这句语句你可以结合实际随意编写。
print("输入有问题,程序不能正常输出结果。")该语句是一句提示信息,在这里它就是进行异常处理的代码块。
【代码示例】
【终端输出】
第2种情形是except后面加上ZeroDivisionError。
ZeroDivisionError是一个异常名称,编写其它程序时这里需要根据实际情况替换成其它的异常名称。
Python中的异常名称有固定的写法,后面会学。
观察上述2种情况的输出结果,发现有没有异常名称输出的结果都是一样的。
但对于程序员来说有异常名称可以有一个提醒的作用。
【代码示例】
【终端输出】
这里程序记录的异常为division by zero,表示除数为0。
看到异常原因我们下次在终端输入的时候不要给除数赋值为0就能避免这个异常。
【代码示例】
除了除数为0的异常,上面的代码还可能有其它的异常。
我因为输入错误,在给b赋值时不小心将0输错成了p,终端输出结果如下图所示:
【终端输出】
【报错提示】
运行上面的代码,程序报 ValueError: invalid literal for int() with base 10: 'p' 这个错误。
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异常。
我们发现同样的代码,可能存在多个异常。
在捕获异常时,如果需要同时处理多个异常我们可以采用下面的代码实现:
【代码示例】
【程序存在2个异常情况】
上面的程序可以捕获2个异常。
当b=0的时候,程序捕获了ZeroDivisionError异常,输出division by zero。
当b=p的时候,程序捕获了ValueError异常,输出invalid literal for int() with base 10: 'p'。
【b=0,程序抛出ZeroDivisionError异常】
【b=w,程序抛出ValueError异常】
【语法总结】
【没有try...except语句的输出结果】
【有try...except语句的输出结果】
【except语句中没有as的输出结果】
【except语句中有as的输出结果】
