Python异常处理

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: 输入的值太小了不想除!!!

转载于:https://www.cnblogs.com/weibgg/p/10786993.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值