python3 异常学习笔记(19)

19 篇文章 0 订阅
14 篇文章 0 订阅
#python的异常
#异常处理try/except
#异常捕捉可以使用 try/except 语句。

'''
try:
    被执行的代码
except:
    产生异常时执行的代码

try 语句按照如下方式工作;
首先,执行 try 子句(在关键字 try 和关键字 except 之间的语句)。
如果没有异常发生,忽略 except 子句,try 子句执行后结束。
如果在执行 try 子句的过程中发生了异常,那么 try 子句余下的部分将被忽略。如果异常的类型和 except 之后的名称相符,那么对应的 except 子句将被执行。
如果一个异常没有与任何的 excep 匹配,那么这个异常将会传递给上层的 try 中。



一个 try 语句可能包含多个except子句,分别来处理不同的特定的异常。最多只有一个分支会被执行。
处理程序将只针对对应的 try 子句中的异常进行处理,而不是其他的 try 的处理程序中的异常。
一个except子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组,例如:
except (RuntimeError, TypeError, NameError):
    pass

最后一个except子句可以忽略异常的名称,它将被当作通配符使用



try/except 语句还有一个可选的 else 子句,如果使用这个子句,那么必须放在所有的 except 子句之后。
else 子句将在 try 子句没有发生任何异常的时候执行。

try:
   语句
except:
    语句
else:
    语句
'''

import sys


try:
    a=2/0
except ZeroDivisionError as  e:
    print(e) #division by zero 被0除


for arg in sys.argv[1:]:
    try:
        f = open(arg, 'r')
    except IOError:
        print('cannot open', arg)
    else:
        print(arg, 'has', len(f.readlines()), 'lines')
        f.close()


#try-finally 语句无论是否发生异常都将执行finally的代码。



try:
    print("请输入一个数字:")
    num=int(input())
except ValueError:
    print("你输入的不是一个数字")
else:
    print("输入正确!")
finally:
    print('输入完成!')

'''
输入:3
将输出以下内容:
3
输入正确!
输入完成!

输入:a
将输出以下内容:
a
你输入的不是一个数字
输入完成!

else中的代码在未发生异常时执行,而finally中的代码一直会执行
'''

'''
抛出异常
Python 使用 raise 语句抛出一个指定的异常。
raise语法格式如下:
raise [Exception [, args [, traceback]]]
'''
''' 例如
str='abcde'
if len(str)>2:
    raise Exception('字符串的长度过长')

'''
'''
用户自定义异常
可以通过创建一个新的异常类来拥有自己的异常。异常类继承自 Exception 类,可以直接继承,或者间接继承,
'''


class MyError(Exception):
    def __init__(self, value):
        self.value = value

    def __str__(self):
        return repr(self.value)

try:
    raise MyError(2*2)
except MyError as e:
    print('My exception occurred, value:', e.value)

'''
try:
    raise MyError(2*2)
finally:
    print("this finally")
'''
#如果一个异常在 try 子句里(或者在 except 和 else 子句里)被抛出,而又没有任何的 except 把它截住,那么这个异常会在 finally 子句执行后被抛出。


for line in open("F:/python/pythonTest.txt"):
    print(line, end="")
#以上这段代码的问题是,当执行完毕后,文件会保持打开状态,并没有被关闭。
#关键词 with 语句就可以保证诸如文件之类的对象在使用完之后一定会正确的执行他的清理方法:
with open("F:/python/pythonTest.txt") as f:
    for line in f:
        print(line, end="")

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值