try…except语句
在Python中,提供了
try...except
语句捕获并处理异常。在使用时,把可能产生异常的代码放在try
语句块中,把处理结果放在except
语句块中,这样当try
语句块中的代码出现错误时,就会执行except
语句块中的代码,如果try
语句块中的代码没有错误,那么except
语句块将不会被执行。
try:
code1
except ExceptionName as alias:
code2
- code1:可能出现错误的代码块
- ExceptionName :需要捕获的异常名称
- as alias:可选参数,取别名
- code2:捕获到该异常需要执行的代码
除数为零
示例代码:
def calculation(one, two):
return one / two
if __name__ == '__main__':
num = int(input('请输第一个数字:'))
num2 = int(input('请输入第二个数:'))
result = calculation(num, num2)
print(result)
执行结果:
请输第一个数字:6
请输入第二个数:0
Traceback (most recent call last):
File "D:/xuexi/python/Demo.py", line 9, in <module>
result = calculation(num, num2)
File "D:/xuexi/python/Demo.py", line 2, in calculation
return one / two
ZeroDivisionError: division by zero
可以看到当除数为零时程序就会抛出ZeroDivisionError(除数异常)
,尝试捕获这个异常并给出提示:
示例代码:
def calculation(one, two):
return one / two
if __name__ == '__main__':
num = int(input('请输第一个数字:'))
num2 = int(input('请输入第二个数:'))
try:
result = calculation(num, num2)
print(result)
except ZeroDivisionError:
print('出错了~_~除数不能为零!!!')
执行结果:
请输第一个数字:6
请输入第二个数:0
出错了~_~除数不能为零!!!
除数为小数
请输第一个数字:6
请输入第二个数:2.3
Traceback (most recent call last):
File "D:/xuexi/python/Demo.py", line 8, in <module>
num2 = int(input('请输入第二个数:'))
ValueError: invalid literal for int() with base 10: '2.3'
从上面可以看出前面定义了输入类型只能是int,在输入小数时也抛出了异常,现尝试同时捕获除数为零
和 非整数输入
两个异常。
示例代码:
def calculation(one, two):
return one / two
if __name__ == '__main__':
try:
num = int(input('请输第一个数字:'))
num2 = int(input('请输入第二个数:'))
result = calculation(num, num2)
print(result)
except ZeroDivisionError:
print('出错了~_~除数不能为零!!!')
except ValueError as e:
print('输入错误,只能是整数:', e)
执行结果:
请输第一个数字:6
请输入第二个数:2.3
输入错误,只能是整数: invalid literal for int() with base 10: '2.3'
多学两招
也可以这样写
try:
code
except (ZeroDivisionError, ValueError) as e:
code
try…except…else语句
try...except...else
是在try...except
语句的基础上再添加有个else子句,用于指定当try
语句块中没有发现异常时要执行的语句块。该语句块中的内容当try
语句中发现异常时,将不会被执行。
示例代码:
def calculation(one, two):
return one / two
if __name__ == '__main__':
try:
num = int(input('请输第一个数字:'))
num2 = int(input('请输入第二个数:'))
result = calculation(num, num2)
print('计算结果:', result)
except ZeroDivisionError:
print('出错了~_~除数不能为零!!!')
except ValueError as e:
print('输入错误,只能是整数:', e)
else:
print('计算完成...')
执行结果:
请输第一个数字:10
请输入第二个数:5
计算结果: 2.0
计算完成...
try…except…finally语句
finally
无论try...except
是否捕获到异常finally
都将会被执行。
try:
code1
except ExceptionName as alias:
code2
finally:
code3
示例代码:
def calculation(one, two):
return one / two
if __name__ == '__main__':
try:
num = int(input('请输第一个数字:'))
num2 = int(input('请输入第二个数:'))
result = calculation(num, num2)
print('计算结果:', result)
except ZeroDivisionError:
print('出错了~_~除数不能为零!!!')
except ValueError as e:
print('输入错误,只能是整数:', e)
else:
print('计算完成...')
finally:
print('程序运行结束')
执行结果:
请输第一个数字:5
请输入第二个数:3.1
输入错误,只能是整数: invalid literal for int() with base 10: '3.1'
程序运行结束
使用raise抛出异常
如果某个函数或方法可能会产生异常,但不想在当前函数或方法中处理这个异常,则可以使用raise语句在函数或方法中抛出异常。
raise ExceptionName(reason)
- ExceptionName:需要抛出的异常名称(Python中存在的异常名称)
- reason:可选参数异常描述
示例代码:
当输入的第一个数小于10抛出异常
def calculation(one, two):
if one <= 10:
raise Exception('输入的值太小了不想除!!!') # 《-------在这里
return one / two
if __name__ == '__main__':
try:
num = int(input('请输第一个数字:'))
num2 = int(input('请输入第二个数:'))
result = calculation(num, num2)
print('计算结果:', result)
except ZeroDivisionError:
print('出错了~_~除数不能为零!!!')
except ValueError as e:
print('输入错误,只能是整数:', e)
else:
print('计算完成...')
finally:
print('程序运行结束')
执行结果:
请输第一个数字:10
请输入第二个数:3
程序运行结束
Traceback (most recent call last):
File "D:/xuexi/python/Demo.py", line 11, in <module>
result = calculation(num, num2)
File "D:/xuexi/python/Demo.py", line 3, in calculation
raise Exception('输入的值太小了不想除!!!') # 《-------在这里
Exception: 输入的值太小了不想除!!!