Python之异常处理


异常处理

  • 所谓异常处理,就是指程序在出现问题时候,依然可以正常的执行剩余的程序,而不会因为异常而终止程序的执行。

try…except结构

  • try...except是最常见的异常处理结构。
  • 结构如下:

try:
	被监控的可能引发异常的语句块
except BaseException [as e]:
	异常处理语句块

  • try块包含着可能引发异常的代码,except块则用来捕捉和处理发生的异常。

#测试异常
while True:
    try:
        x = int(input('输入一个数字:'))
        print('输入的数字是:',x)

        if x ==88:
            print('退出')
            break

    except BaseException as e:
        print(e)
        print('异常,输入的不是一个数字!')


>>>
输入一个数字:33
输入的数字是: 33
输入一个数字:tt
invalid literal for int() with base 10: 'tt'
异常,输入的不是一个数字!
输入一个数字:88
输入的数字是: 88
退出


try…多个except结构

  • 结构如下:

try:
	被监控的、可能引发异常的语句块
except Exception1:
	处理Exception1的语句块
except Exception2:
	处理Exception的语句块

  • 测试try…多个except结构

try:
    a = input('请输入一个被除数:')
    b = input('请输入一个除数:')

    c = float(b)/float(a)
    print(c)
except ZeroDivisionError:
    print('异常,不能除以0')
except ValueError:
    print('异常,不能讲字符串转化成数字')
except BaseException as e:
    print(e)
    print('异常出错!')
    
》》》
请输入一个被除数:0
请输入一个除数:0
异常,不能除以0


try…except…else结构

  • 如果try块中没有抛出异常,则执行else。
  • 如果try块中抛出异常,则执行except块,不执行else。

# 测试try...except...else结构
try:
    a = input('请输入一个被除数:')
    b = input('请输入一个除数:')
    c = float(b)/float(a)

except BaseException as e:
    print(e)
else:
    print('结果是:',c)

》》》
请输入一个被除数:0
请输入一个除数:12
float division by zero

请输入一个被除数:50
请输入一个除数:5
结果是: 0.1


try…except…finally结构

  • finally块无论是否发生异常都会被执行;
  • 通常用来释放try块中申请的资源。

# 测试try...except...finally结构
try:
    a = input('请输入一个被除数:')
    b = input('请输入一个除数:')
    c = float(b)/float(a)

except BaseException as e:
    print(e)
else:
    print('结果是:',c)
finally:
    print('异常不异常都执行的语句!')

》》》
请输入一个被除数:50
请输入一个除数:5
结果是: 0.1
异常不异常都执行的语句!

请输入一个被除数:4
请输入一个除数:0
float division by zero
异常不异常都执行的语句!


# 测试try...except...finally结构
try:
    f = open('c:/python.txt', 'r')
    content = f.readline()
    print(content)
except:
    print('文件未找到!')
finally:
    print('关闭资源!')
    try:
        f.close()
    except BaseException as e:
        print(e)

》》》
文件未找到!
关闭资源!
name 'f' is not defined


with上下文管理

  • finally块由于是否发生异常都会执行,通常是释放资源的代码。

  • 可以通过with上下文管理,更方便的实现释放资源的操作。

  • with上下文管理的语法结构:


with context_expr [as var]:
	语句块

  • with上下文管理可以自动管理资源,在with代码块执行完后自动还原进入代码之前的现场或上下文
  • with不是取代try…except…finaly结构的
  • 只是作为补充,方便在文件管理、网络通信时的开发。

# 测试with上下文管理
with open('c:/a.txt', 'r') as f:
    content = f.readline()
    print(content)

print('程序执行结束!')

》》》
我爱你!
程序执行结束!


你可能感兴趣的:(Python—异常)