Python学习笔记006_异常_else_with

时间:2021-09-10 14:33:44

Python学习笔记006_异常_else_with

Python学习笔记006_异常_else_with

>>> # try-except语句
>>>
>>> # try :
>>> #    检测范围
>>> # except Exception[as reason]:
>>> #    出现异常(Exception)后的处理代码
>>> 
>>> try :
    file = open("我是一个你找不到的文件.txt")
    print(file.read())
    file.close()
    # 下面的reason是一个变量,名称可以随意的
except OSError as reason:
    print('文件出错啦!\n具体原因是:'+str(reason))

文件出错啦!
具体原因是:[Errno 2] No such file or directory: '我是一个你找不到的文件.txt'
>>>
>>> # try 后面可以跟多个except语句块
>>>
>>> try :
    num = 1+'
    file = open("我是一个你找不到的文件.txt")
    print(file.read())
    file.close()
except OSError as reason:
    print('文件出错啦!\n具体原因是:'+str(reason))
except TypeError as reason:
    print('类型出错!\n具体原因是:'+str(reason))

类型出错!
具体原因是:unsupported operand type(s) for +: 'int' and 'str'
>>>
>>> # 也可以将几个异常一起处理
>>> try :
    num = 1+'
    file = open("我是一个你找不到的文件.txt")
    print(file.read())
    file.close()
    # 下面的reason是一个变量,名称可以随意的
except (OSError,TypeError )as reason:
    print('出错;!\n具体原因是:'+str(reason))

出错;!
具体原因是:unsupported operand type(s) for +: 'int' and 'str'
>>> # 当try语句块中某一行出错时,直接到except块中进行捕获,后面的代码不在被执行
>>> # try后面不根任何异常名称,将会捕获所有的异常
>>>
>>> try :
    int('ab')
    num = 1+'
    file = open("我是一个你找不到的文件.txt")
    print(file.read())
    file.close()
    # 下面的reason是一个变量,名称可以随意的
except (OSError,TypeError )as reason:
    print('出错;!\n具体原因是:'+str(reason))
except :
    print('出错')

出错
>>>
>>> # try-finally语句
>>> #
>>> # try :
>>> #    检测范围
>>> # except Exception[as reason]:
>>> #    出现异常(Exception)后的处理代码
>>> # finally :
>>> #    无论如何都会执行的代码
>>>
>>> try :
    file = open("我是一个你找不到的文件.txt",'w')
    print(file.write('我存在了'))
    #这里出错,文件还没有关闭,写入的内容就不会到文件中去
    num = 1+'
except (OSError,TypeError )as reason:
    print('出错;!\n具体原因是:'+str(reason))
finally :
    file.close()

4
出错;!
具体原因是:unsupported operand type(s) for +: 'int' and 'str'
>>>
>>> #  手动抛出一个异常  raise
>>> raise
Traceback (most recent call last):
  File "<pyshell#67>", line 1, in <module>
    raise
RuntimeError: No active exception to reraise
>>> raise ValueError('不能处理的值')
Traceback (most recent call last):
  File "<pyshell#68>", line 1, in <module>
    raise ValueError('不能处理的值')
ValueError: 不能处理的值
>>> 

#丰富的else
>>> #1, 要么怎样,要么不怎样 if else 的用法 不再赘述
>>> #2, 干完了能怎样,干不完别想怎样 与while for搭配使用
>>> #3, 没有问题,那就干吧 与异常处理机制搭配
>>>
>>> # else 只在循环正常完成之后执行,如果是从break中跳出来的就不会被执行
>>>

def showMaxFactor(num) :
    '这是一个求最大公约数的函数'
    count = num // 2
    while count > 1:
        if num % count == 0:
            print('%d最大公约数是%d' %(num,count))
            break
        count -= 1
    else :
        print('%d是素数!' %num)

num = int (input('请输入一个数字:'))
showMaxFactor(num)
============== RESTART: C:/Users/Administrator/Desktop/else.py ==============
请输入一个数字:12
12最大公约数是6
>>>
============== RESTART: C:/Users/Administrator/Desktop/else.py ==============
请输入一个数字:7
7是素数!

>>># try 语句块中没有任何异常才执行else,否则不执行

try :
    int (')
except ValueError as reason:
    print('出错了:'+str(reason))
else:
    print('没有任何异常1')

# Python使用with语句,可以省去关闭文件,with会帮助我们去关闭文件

try:
    f = open('data.txt','w')
    for each_line in f:
        print(each_line)
except OSError as reason:
    print('出错啦:'+str(reason))
finally:
    f.close()
# 改成with语句
try:
    with open('data.txt','w') as file:
        for each_line in file:
            print(each_line)
except OSError as reason:
    print('出错啦:'+str(reason))