python入门学习笔记之非常处理惩罚

分享
源码 2024-9-25 14:44:41 67 0 来自 中国
本节重点


  • 相识什么优劣常
  • 相识常见非常的种类
  • 把握非常处理惩罚
本节时长需控制在15分钟内
一 什么优劣常

非常就是步调运行时发生错误的信号(在步调出现错误时,则会产生一个非常,若步调没有处理惩罚它,则会抛出该非常,步调的运行也随之停止),在python中,错误触发的非常如下[图片上传失败...(image-a60e74-1649937489926)]
而错误分成两种
1.语法错误(这种错误,根本过不了python表明器的语法检测,必须在步调实验前就改正)
#语法错误树模一if#语法错误树模二def test:    pass#语法错误树模三class Foo    pass#语法错误树模四print(haha)2.逻辑错误
#TypeError:int范例不可迭代for i in 3:    pass#ValueErrornum=input(">>: ") #输入helloint(num)#NameErroraaa#IndexErrorl=['egon','aa']l[3]#KeyErrordic={'name':'egon'}dic['age']#AttributeErrorclass Foo:passFoo.x#ZeroDivisionError:无法完成盘算res1=1/0res2=1+'str'二 非常的种类

在python中差别的非常可以用差别的范例(python中同一了类与范例,范例即类)去标识,一个非常标识一种错误
常见非常
AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性xIOError 输入/输出非常;根本上是无法打开文件ImportError 无法引入模块或包;根本上是路径标题或名称错误IndentationError 语法错误(的子类) ;代码没有准确对齐IndexError 下标索引超出序列界限,比如当x只有三个元素,却试图访问x[5]KeyError 试图访问字典里不存在的键KeyboardInterrupt Ctrl+C被按下NameError 利用一个还未被赋予对象的变量SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)TypeError 传入对象范例与要求的不符合UnboundLocalError 试图访问一个还未被设置的局部变量,根本上是由于尚有一个同名的全局变量,导致你以为正在访问它ValueError 传入一个调用者不盼望的值,纵然值的范例是准确的更多非常
ArithmeticErrorAssertionErrorAttributeErrorBaseExceptionBufferErrorBytesWarningDeprecationWarningEnvironmentErrorEOFErrorExceptionFloatingPointErrorFutureWarningGeneratorExitImportErrorImportWarningIndentationErrorIndexErrorIOErrorKeyboardInterruptKeyErrorLookupErrorMemoryErrorNameErrorNotImplementedErrorOSErrorOverflowErrorPendingDeprecationWarningReferenceErrorRuntimeErrorRuntimeWarningStandardErrorStopIterationSyntaxErrorSyntaxWarningSystemErrorSystemExitTabErrorTypeErrorUnboundLocalErrorUnicodeDecodeErrorUnicodeEncodeErrorUnicodeErrorUnicodeTranslateErrorUnicodeWarningUserWarningValueErrorWarningZeroDivisionError三 非常处理惩罚

为了包管步调的结实性与容错性,即在遇到错误时步调不会瓦解,我们须要对非常举行处理惩罚,
如果错误发生的条件是可预知的,我们须要用if举行处理惩罚:在错误发生之前举行防备
AGE=10while True:    age=input('>>: ').strip()    if age.isdigit(): #只有在age为字符串情势的整数时,下列代码才不会堕落,该条件是可预知的        age=int(age)        if age == AGE:            print('you got it')            break如果错误发生的条件是不可预知的,则须要用到try...except:在错误发生之后举行处理惩罚
#根本语法为try:    被检测的代码块except 非常范例:    try中一旦检测到非常,就实验这个位置的逻辑#举例try:    f=open('a.txt')    g=(line.strip() for line in f)    print(next(g))    print(next(g))    print(next(g))    print(next(g))    print(next(g))except StopIteration:    f.close()四 try..except...详细用法

1.非常类只能用来处理惩罚指定的非常情况,如果非指定非常则无法处理惩罚
s1 = 'hello'try:    int(s1)except IndexError as e: # 未捕捉到非常,步调直接报错    print e2.多分支
s1 = 'hello'try:    int(s1)except IndexError as e:    print(e)except KeyError as e:    print(e)except ValueError as e:    print(e)3.万能非常Exception
s1 = 'hello'try:    int(s1)except Exception as e:    print(e)4.也可以在多分支厥后一个Exception
s1 = 'hello'try:    int(s1)except IndexError as e:    print(e)except KeyError as e:    print(e)except ValueError as e:    print(e)except Exception as e:    print(e)5.非常的其他机构
s1 = 'hello'try:    int(s1)except IndexError as e:    print(e)except KeyError as e:    print(e)except ValueError as e:    print(e)#except Exception as e:#    print(e)else:    print('try内代码块没有非常则实验我')finally:    print('无论非常与否,都会实验该模块,通常是举行清算工作')6.自动触发非常
try:    raise TypeError('范例错误')except Exception as e:    print(e)7.自界说非常
class EgonException(BaseException):    def __init__(self,msg):        self.msg=msg    def __str__(self):        return self.msgtry:    raise EgonException('范例错误')except EgonException as e:    print(e)8.断言:assert 条件
assert 1 == 1  assert 1 == 29.总结try..except
1:把错误处理惩罚和真正的工作分开来
2:代码更易构造,更清晰,复杂的工作使命更容易实现;
3:毫无疑问,更安全了,不至于由于一些小的疏忽而使步调意外瓦解了;
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-10-18 22:34, Processed in 0.165758 second(s), 32 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表