python中的错误和异常,python常见的错误
程序运行时,如果python解释器遇到错误,会停止程序的执行,并提示一些错误信息,这是一个异常。下面这篇文章主要介绍Python基础课中错误和异常的处理方法,有需要的朋友可以参考一下。
00-1010前言异常和错误的概念语法错误的分类运行时错误逻辑错误异常处理机制主动捕捉和处理异常抛出异常断言处理常见异常和自定义异常类的解释附:用户定义的异常示例摘要
目录
继续更新Python基础语法。Python基础语法到此结束。在这次错误和异常处理的更新之后,文件、数据库、包管理、模块管理和正则表达式的使用都将被更新。完成这些常规任务后,将更新爬虫和数据分析。这个专栏写的东西很适合新手,当然也很适合老手。每个部分都有非常全面的编程技巧。相信大家看完都会觉得受益匪浅。(常见异常列表附在文末)
前言
顾名思义,错误是由于某种原因,结果不符合我们的预期。我们的代码在运行时极有可能出现错误,我们有时称之为bug。在Python中,异常通常意味着我们的Python解释器发现了我们程序中的错误,并在它自己不能解决错误时报告给操作系统,导致程序中断。就像在现实中,当我们犯下个人错误时,监督我们的人会发现我们的错误,发现我们的异常行为并处理它们。帮助我们及时纠正自己的错误行为。
异常与错误的概念
错误分类
语法错误,也称编译错误,是指计算机操作系统在执行你的代码时,由于你的代码存在语法问题,导致程序无法开始执行而产生的错误。一般是由于函数名和关键字的使用不正确,或者在包引导时导入不存在的包造成的。随着编译器的迭代更新越来越强,这种错误已经非常少见了。以Python中的编译错误提示SyntaxErrorl为例,如下图(少了半括号):
语法错误
运行时错误是指在程序编译完成,计算机操作系统开始执行你的程序时,由于程序员的疏忽,导致代码之间的矛盾而产生的错误。例如,不考虑数组边界或变量范围会导致数组越界、零除异常.这种错误会导致你的程序突然挂起,在某些情况下会造成很大的损失。例如,以下情况:
运行时错误
这种错误往往是人们最头疼的错误,因为操作系统不会直接给我们抛出异常,你的程序可以正常运行,但是给程序输入一个值后得到的结果就是错误的。很气人。我们可以改善这个错误的方法就是百度,思考,调试。实在不行找个老鸟帮你看看。常见的错误有:无限循环、表达式错误、局部和全局变量混合。
逻辑错误
异常处理机制
Python采用结构化的异常处理机制。我们可以通过try捕捉异常,然后在except中处理异常。最后,资源释放等工作在Finally中完成(finally中的代码无论有无异常都会被执行)。与其他语言不同的是,Python中引入了else机制,只有当try中的代码没有异常时,才会执行else中的语句。如果有异常,就不会执行。有关详细信息,请参见下面的代码。如您所见,您可以捕捉多种类型的异常。要捕捉多个异常,需要将类型覆盖率较小的异常放在前面,在捕捉之前,try代码块中的代码或函数通常会抛出异常。
#异常捕获
A=int(input(输入除数: ))
B=int(输入(输入被除数3360 ))
尝试:
res=a/b
除了ZeroDivisionError:
打印(“除数不能为0”)
#以同样方式处理的异常可以写成这样
exception(base exception,TypeError
):
print(有错误)
else:
print(您的结果为,res)
finally:
print(感谢使用!)
主动抛出异常
我们可以轻松的进行异常的捕获并进行解决。但是有时候我们有一种需求就是将错误抛出给上一层进行处理。这时候主动抛出异常就登场了。在Python中主动抛出异常使用的是raise关键字。raise关键字一般与自定义异常类一块进行使用,所以大家先记住raise是主动抛出异常的关键字,待会到自定义异常类处看代码即可。
断言处理
断言处理使用语法为:assert <布尔表达式>或者assert <布尔值表达式> , <字符串表达式>。assert会先对布尔值表达式进行判断,如果表达式为True就不进行操作,否则会抛出异常。并在抛出的异常中输出字符串表达式的信息。具体操作可以看以下代码:
3 录入一个学生的成绩,把该学生的成绩转换为A优秀、B良好、C合格、D不及格的形式,
最后将该学生的成绩打印出来。要求使用assert断言处理分数不合理(小于0或者大于100)的情况
请编写程序。
n=int(input())
assert n in range(101),"您输入的成绩不合理!"
if n>=85:
print("优秀!")
elif n>=70:
print("良好!")
elif n>=60:
print("合格!")
else:
print("不及格!")
自定义异常类
Python官方库中提供了一系列的异常处理类,在Python中所有的异常均由类实现,所有的异常类又继承自BaseException类,程序运行时出现的异常大多继承自Exception类。Python支持自定义异常类。自定义异常类一般继承Exception或者其子类名称一般以Exception或者Error命名。
自定义异常类以及主动抛弃异常
自己定义一个异常类,继承Exception类, 捕获下面的过程:判断input()输入的字符串长度是否小于5,
如果小于5,比如输入长度为3则输出:"The input is of length 3, expecting at least 5“,
大于5则输出"success”。
class StrLenError(Exception):
def __init__(self,s):
Exception.__init__(self,s)
self.s =s
def __str__(self):
return f"The input is of length {len(self.s)}, expecting at least 5"
n=input()
if len(n)<=5:
raise StrLenError(n)
else:
print("success")
常见异常及释义
以下是一些常见的类及引发该类异常的错误描述:
类名 描述
附:用户自定义异常实例
你可以通过创建一个新的异常类来拥有自己的异常。异常类继承自 Exception 类,可以直接继承,或者间接继承,例如:
>>> class NewError(Exception):def __init__(self, value):
self.value = value
def __str__(self):
return repr(self.value)
>>> try:
raise NewError(2*2)
except NewError as e:
print(New exception occurred, value:, e.value)
My exception occurred, value: 4
>>> raise NewError(oops!)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
__main__.NewError: oops!
在这个例子中,类 Exception 默认的 init() 被覆盖。
当创建一个模块有可能抛出多种不同的异常时,一种通常的做法是为这个包建立一个基础异常类,然后基于这个基础类为不同的错误情况创建不同的子类:
class Error(Exception):"""Base class for exceptions in this module."""
pass
class InputError(Error):
"""Exception raised for errors in the input.
Attributes:
expression -- input expression in which the error occurred
message -- explanation of the error
"""
def __init__(self, expression, message):
self.expression = expression
self.message = message
class TransitionError(Error):
"""Raised when an operation attempts a state transition thats not
allowed.
Attributes:
previous -- state at beginning of transition
next -- attempted new state
message -- explanation of why the specific transition is not allowed
"""
def __init__(self, previous, next, message):
self.previous = previous
self.next = next
self.message = message
大多数的异常的名字都以"Error"结尾,就跟标准的异常命名一样。
总结
到此这篇关于Python基础教程之错误和异常处理的文章就介绍到这了,更多相关Python错误和异常处理内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。