python错误与异常

目录

前言

一、python错误和异常

二、异常处理

1.异常捕捉可以使用 try/except 语句。

2.也可使用try/except...else

3.try-finally 语句 

4.抛出异常

5. 用户自定义异常

6.定义清理行为

7.预定义的清理行为

总结



前言

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就简单介绍了python错误和异常以及异常处理。

一、python错误和异常

  • 语法错误:解析器报错位置标记小箭头。
  • 异常:运行中检测的错误定义为异常。大多异常不被程序处理,错误信息会以调用栈的形式显示具体信息。

二、异常处理

1.异常捕捉可以使用 try/except 语句。

代码如下(示例):

import sys

try:
    f = open('myfile.txt')
    s = f.readline()
    i = int(s.strip())
except OSError as err:
    print("OS error: {0}".format(err))
except ValueError:
    print("Could not convert data to an integer.")
except:
    print("Unexpected error:", sys.exc_info()[0])
    raise

try语句:正确执行try之后句子,异常类型名称与except语句中的相同则执行异常。若异常不匹配,则上报给上层try。一个 try 语句可能包含多个except子句,分别来处理不同的特定的异常。最多只有一个分支会被执行。

一个except子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组,例如:

代码如下:

except (RuntimeError, TypeError, NameError):

      pass

2.也可使用try/except...else

else 子句将在 try 子句没有发生任何异常的时候执行

代码如下(示例):

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 子句中的异常,而且还能处理子句中调用的函数(甚至间接调用的函数)里抛出的异常 。如下;

>>> def this_fails():
        x = 1/0
   
>>> try:
        this_fails()
    except ZeroDivisionError as err:
        print('Handling run-time error:', err)
   
Handling run-time error: int division or modulo by zero

3.try-finally 语句 

不管异常如何,执行到最后的代码。

try:
    runoob()
except AssertionError as error:
    print(error)
else:
    try:
        with open('file.log') as file:
            read_data = file.read()
    except FileNotFoundError as fnf_error:
        print(fnf_error)
finally:
    print('这句话,无论异常是否发生都会执行。')

4.抛出异常

使用 raise 语句抛出一个指定的异常。 语法如下:

raise [Exception [, args [, traceback]]] #语法格式

#实例

x = 10
if x > 5:
    raise Exception('x 不能大于 5。x 的值为: {}'.format(x))

raise 唯一的一个参数指定了要被抛出的异常。它必须是一个异常的实例或者是异常的类(也就是 Exception 的子类)。

5. 用户自定义异常

自己创建异常。异常类继承自 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)
   
My exception occurred, value: 4
>>> raise MyError('oops!')

 默认的 __init__() 被覆盖

一个模块可能有多个不同异常时,通常建立一个基础异常类,为不同的错误情况创建不同的子类。

大多数的异常的名字都以"Error"结尾,就跟标准的异常命名一样

6.定义清理行为

不管 try 子句里面有没有发生异常,finally 子句都会执行。都会执行的清理行为。

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

>> def divide(x, y):
        try:
            result = x / y
        except ZeroDivisionError:
            print("division by zero!")
        else:
            print("result is", result)
        finally:
            print("executing finally clause")

7.预定义的清理行为

预定义的清理行为,系统一旦不需要它了,那么这个标准的清理行为就会执行

关键词 with 语句就可以保证诸如文件之类的对象在使用完之后一定会正确的执行他的清理方法:

with open("myfile.txt") as f:
    for line in f:
        print(line, end="")

在处理过程中出问题了,文件 f 总是会关闭


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了python异常与错误。如有侵权,麻烦联系,立刻删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值