Python抛出异常_python抛出异常的作用

Python抛出异常_python抛出异常的作用在工作中都会遇到异常报错问题,那么在这抽空码一些内容以作记录。在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,不同的类对象标识不同的异常,一个异常标识一种错误AttributeError#试图访问一个对象没有的树形,比如foo.x,但是foo没有属性xIOError#输入/输出异常;基本上是无法打开文件ImportError#无法引入模块或包;基本上是路径问题或名称错误Indentati.

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

在工作中都会遇到异常报错问题,那么在这抽空码一些内容以作记录。

 

python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,不同的类对象标识不同的异常,一个异常标识一种错误

AttributeError      #试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
IOError             #输入/输出异常;基本上是无法打开文件
ImportError         #无法引入模块或包;基本上是路径问题或名称错误
IndentationError    #语法错误(的子类) ;代码没有正确对齐
IndexError          #下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError            #试图访问字典里不存在的键
KeyboardInterrupt   #Ctrl+C被按下
NameError           #使用一个还未被赋予对象的变量
SyntaxError         #Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
TypeError           #传入对象类型与要求的不符合
UnboundLocalError   #试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它
ValueError          #传入一个调用者不期望的值,即使值的类型是正确的
# 其他异常
ArithmeticError
AssertionError
AttributeError
BaseException
BufferError
BytesWarning
DeprecationWarning
EnvironmentError
EOFError
Exception
FloatingPointError
FutureWarning
GeneratorExit
ImportError
ImportWarning
IndentationError
IndexError
IOError
KeyboardInterrupt
KeyError
LookupError
MemoryError
NameError
NotImplementedError
OSError
OverflowError
PendingDeprecationWarning
ReferenceError
RuntimeError
RuntimeWarning
StandardError
StopIteration
SyntaxError
SyntaxWarning
SystemError
SystemExit
TabError
TypeError
UnboundLocalError
UnicodeDecodeError
UnicodeEncodeError
UnicodeError
UnicodeTranslateError
UnicodeWarning
UserWarning
ValueError
Warning
ZeroDivisionError

如何处理异常:

python解释器去执行程序,检测到了一个错误时,触发异常,异常触发后且没被处理的情况下,程序就在当前异常处终止,后面的代码不会运行

#一个简单得例子,

>>> Print("Hello World")


Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
    Print("Hello World")
NameError: name 'Print' is not defined

NameError 错误被抛出,同时 Python 还会打印出检测到的错误发生的位置。这就是一个错误处理器
 

程序运行中的异常可以分为两类:语法错误和逻辑错误。首先,我们必须知道,语法错误跟异常处理无关,所以我们在处理异常之前,必须避免语法上的错误。

使用if判断式可以异常处理,但是if判断式的异常处理只能针对某一段代码,对于不同的代码段的相同类型的错误你需要写重复的if来进行处理。而且在你的程序中频繁的写与程序本身无关,与异常处理有关的if,会使得你的代码可读性极其的差

#我们平时用if做的一些简单的异常处理
num1=input('>>: ') #输入一个字符串试试
if num1.isdigit():
    int(num1) #我们的正统程序放到了这里,其余的都属于异常处理范畴
elif num1.isspace():
    print('输入的是空格,就执行我这里的逻辑')
elif len(num1) == 0:
    print('输入的是空,就执行我这里的逻辑')
else:
    print('其他情情况,执行我这里的逻辑')
#这些if,跟代码逻辑并无关系,显得可读性极差,如果类似的逻辑多,那么每一次都需要判断这些内容,就会倒置我们的代码特别冗长。

python特定的语法结构捕获异常

#异常捕获 单个分支
try:
     逻辑代码(被捕获得内容)
except 异常类型:
     检测到异常,就执行这个位置的逻辑

 
# 多个分支捕获
# 单分支只能用来处理指定的异常情况,如果未捕获到异常,则报错
try:
    abc()
except ValueError:
    print('异常输出')
except IndexError:
    print('异常输出')


# Exception 属性可以捕获任意异常,不过它是一把双刃剑,有利有弊,我们要视情况使用
try:
     abc()
except Exception as e:
     print(e)检测到异常,就执行这个位置的逻辑




# try...else语句

try:
     abc()
except Exception as e:
     print(e)
else:
    print('') #当try语句中的代码没有异常,就执行else中的代码



# try...finally语句

try:
     abc()
except Exception as e:
     print(e)
finally:
    print('') #不论try中有没有异常,finally都会执行




#自主出发异常  关键字 raise
try:
    raise TypeError('类型错误')
except Exception as e:
    print(e)





断言处理
assert断言是声明其布尔值必须为真的判定,如果发生异常就说明表达示为假。可以理解assert断言语句为raise-if-not,用来测试表示式,其返回值为假,就会触发异常。

语法:
       

assert expression[,reason]

assert 表达式 [, 参数]

        assert语句一般用于对程序某个时刻必须满足的条件进行验证,仅当”debug” 为True时有效。当PYthon脚本以_()选项编译为字节码文件是,assert语句将被移除以提高运行速度。

>>> assert len([1,2,3,4,5,6]) >=5  #列表元素个数小于5
>>> assert 2==1   #2不等于1

Traceback (most recent call last):
  File "<stdin>", line 25, in <module>
    assert 2==1   #2不等于1
AssertionError




# 格式:assert  条件  , 条件为false时的错误信息, 结果为raise一个AssertionError出来

 

用sys模块回溯最后的异常

当发生异常时Python会回溯异常,给出大量的提示,可能会给程序员的定位和纠错带来一定的困难,这是可以使用sys模块回溯最近一次异常。语法为:

import sys
try:
    block
except:
    t==sys.exc_info()
    print(t)


"""
sys.exc_info()返回值是一个三元组(type,value/message,traceback)。其中,type表示异常的类型,value/message表示异常的信息或者参数,而traceback则包含调用栈信息的对象。
        sys.exc_info()可以直接定位最终引发异常的原因,结果比较简洁,但是缺点是难以直接确定引发异常的代码位置
"""

 

raise

语法结构:

raise [exceptionName [(reason)]]

其中,用 [] 括起来的为可选参数,其作用是指定抛出的异常名称,以及异常信息的相关描述。如果可选参数全部省略,则 raise 会把当前错误原样抛出;如果仅省略 (reason),则在抛出异常时,将不附带任何的异常描述信息。

每次执行 raise 语句,都只能引发一次执行的异常。

#举个简单例子
try:
    a = 2
    #判断是否为 1
    if a != 1:
        raise ValueError("a 不为 1")
except ValueError as e:
    print("引发异常:",repr(e))



"""
运行结果为:
引发异常: ValueError('a 不为 1',)
"""

 

自定义异常

#定义一个异常类,继承Exception
class Networkerror(Exception):
   def __init__(self):
       pass
   def __str__(self):
       return "这是一个异常说明!"


try:
   raise Networkerror()  # raise 出这个异常
except Networkerror as e:
   print(e)

"""
输出: 这是一个异常说明!
"""

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/180904.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • osi七层模型各层功能简述(简述osi七层模型各层功能)

    读完本篇文章将会了解以下问题1.OSI的基本概念及原则2.OSI七层模型各层功能概述3.OSI七层模型举例4.OSI七层模型总结—————————————————————————————————————————…

  • T-SQL之DECLARE,SET,PRINT语句[通俗易懂]

    T-SQL之DECLARE,SET,PRINT语句[通俗易懂]1.DECLARE语句DECLARE语句是数据声明语句,主要作用是声明局部变量、函数、存储过程或游标变量等;基本语法格式:DECLARE{{@local_variable[AS]data_type}|[=value]}[,…n]@local_variable即变量的名称,一定要以@开头,data_type为变量的数据类型,value是声明的变量的值(可选)…

  • js 闭包传参_JavaScript闭包演示

    js 闭包传参_JavaScript闭包演示有个网友问了个问题,如下的html,为什么每次输出都是5,而不是点击每个p,就alert出对应的1,2,3,4,5。闭包演示functioninit(){varpAry=document.getElementsByTagName(“p”);for(vari=0;ipAry[i].onclick=function(){alert(i);}}}产品一产品二产品三产品四产品五解决方…

  • 2020Java高级开发工程师面试题汇总

    2020Java高级开发工程师面试题汇总2020面试总结工作三年多,面试目标为高级开发工程师前言9.5–11.13,经过了长达70天的面试,终于有了结果。期间崩溃过无数次,很多次面试都被虐到怀疑人生,也有三面被刷掉无奈,一次次整装重新出发,一次次从头再来。今天有时间整理最近面试过程中涉及到的问题和经验,希望可以帮助到正在面试中或即将面试的同行们。一、面试过的公司阿里巴巴京东美团百度度小满金融爱奇艺当当网58同城贝壳找房快手小米滴滴微博陌陌中信银行尚德机构轻松筹货拉拉一起教育易车好未来二、面

  • 【设计模式】Template Method模式

    【设计模式】Template Method模式

  • 简述Python垃圾回收机制「建议收藏」

    简述Python垃圾回收机制「建议收藏」引言许多高级语言都具有自己的垃圾回收机制,以管理计算机内存,Python也不例外。对于垃圾回收机制的了解程度,成了开发人员是否真正了解Python的检验手段,在面试的时候许多面试官也喜欢以此作为题目考察面试者Garbagecollection(GC)概述现在的高级语言如java,c#等,都采用了垃圾回收机制,而不再是c,c++里用户自己管理维护内存的方式。自己管理内存极其自由,可…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号