Python:异常处理

在写代码里非常多的时候我会遇到处理异常的情况,为了保证程序遇到异常能够快速处理,今天我需要整理写一下处理异常的笔记:

  • 基本try - except 语句
  • 捕捉特定异常:except XXX :
  • else子句
  • finlly子句
  • 使用异常对象: except XXX as xx :
  • 抛出异常: raise XXX
  • 断言 accert 

基本try-except语句

try:
    n = int(input("请输入一个正整数:"))
    print("the number is %d" % n)
except:
    print("NONONO,the number is not > 0")

捕捉特定异常  / 使用异常对象

#捕捉Type异常
try:
    n = input("请输入一个正整数:")
    print("the number is %d" % n)
except TypeError:
    print("tpye is not right!!")

>>>请输入一个正整数:1
tpye is not right!!


#使用ValueError异常
try:
    n = int(input("请输入一个正整数:"))
    print("the number is %d" % n)
except ValueError as err:
    print("NONONO,you have a error:",err)

>>>请输入一个正整数:1.1
NONONO,you have a error: invalid literal for int() with base 10: '1.1'

#invalid literal for int() with base 10: '1.1'       这一段就是err的内容

else子句

'''
不发生异常,我们往往会希望执行一些额外的代码,这可以通过 else 子句轻松地实现
'''
try:
    n = int(input("请输入一个正整数:"))

except ValueError as err:
    print("NONONO,you have a error:",err)

#以上的问题则执行
else:
    print("okok!!")
    print("the number is %d" % n)

finlly子句

'''
无论什么情况,finally子句都会被执行,通常用于释放外部资源。一旦使用,无论文件是否打开成功,都必须清理资源。所以,在 finally 子句中使用 close(),可以确保即使发生异常,文件也能够被关闭.
例如,操作一个文件:
'''
try:
    f = open("C:\\Users\\BEAR\\Desktop\\Training\\kk.txt")
    while True:
        s = input()
        if s.upper() == "Q":break
        f.write(s+"\n")

except Keyboardinterrupt as ke :
    print("按Ctrl+c快捷键程序终止:",ke)

finally:
    print('正常关闭文件~')
    f.close()

 

强行抛出异常 / 自定义异常

'''
强行抛出异常
当程序出现错误,python会自动引发异常,也可以通过 raise 强制引发异常。一旦执行了raise 语句,raise后面的语句将不能执行。
强行抛出内建异常
'''
def print_num(num):
    if(num > 5 or num < 1):

        raise NameError          #没错,在这里

    print("num:{0}".format(num))


print_num(2)

try:
    print_num(6)
except NameError:
    print('NONONO!Name Error')

#输出
num:2
NONONO!Name Error
'''
自定义异常
如果要抛出自定义异常,首先根据需要,可以定义一个异常的class,选择好继承关系,然后,用raise语句抛出一个异常的实例。
'''
#创建一个numError继承异常的基类
class numError(Exception):
    def __init__(self, data):
        self.data = data

def print_num(num):
    if (num > 5 or num < 1):

        raise numError("error!!!!!!!!!")     #没错,在这里

    print("num:{}".format(num))

print_num(0)

#输出
 raise numError("error!!!!!!!!!")

 

断言 

'''
断言 accert
一般用于程序中置入检查
'''
#后面条件为真,程序继续
accert 4 > 3

#后面条件为假,程序自爆
accert 3 > 4

 

posted @ 2018-07-31 20:06  kumata  阅读(277)  评论(0编辑  收藏  举报