Python 异常

异常

在运行它的时候,也有可能发生错误。运行期检测到的错误被称为异常。 大多数的异常都不会被程序处理,都以错误信息的形式展现在这里:

try语句按照如下方式工作;

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

一个 try 语句可能包含多个except子句,分别来处理不同的特定的异常。最多只有一个分支会被执行。

处理程序将只针对对应的try子句中的异常进行处理,而不是其他的 try 的处理程序中的异常。

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

try except 语句还有一个可选的else子句,如果使用这个子句,那么必须放在所有的except子句之后。这个子句将在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()

类 Exception 默认的 __init__() 被覆盖。

异常的类可以像其他的类一样做任何事情,但是通常都会比较简单,只提供一些错误相关的属性,并且允许处理异常的代码方便的获取这些信息。

当创建一个模块有可能抛出多种不同的异常时,一种通常的做法是为这个包建立一个基础异常类,然后基于这个基础类为不同的错误情况创建不同的子类:


异常

错误分语言错误和逻辑错误

异常是由客观原因引起的。

Try:

语句体

Except 异常类型

处理语句

Except 异常类型

处理语句

Try

语句体

Except(异常类型1,异常类型2)

处理语句

Except Exception:

所有异常

Try:

语句体

Except 异常类型 as名称:

Print(名称)

 

Else 没有异常才会执行结束

 

捕获所有异常

Except

Finally 关闭文件,关闭数据库

异常可以嵌套

自定义异常类一般继承Exeption 

 

 

In out error 输入输出异常

异常名称    描述

BaseException    所有异常的基类

SystemExit    解释器请求退出

KeyboardInterrupt    用户中断执行(通常是输入^C)

Exception    常规错误的基类

StopIteration    迭代器没有更多的值

GeneratorExit    生成器(generator)发生异常来通知退出

StandardError    所有的内建标准异常的基类

ArithmeticError    所有数值计算错误的基类

FloatingPointError    浮点计算错误

OverflowError    数值运算超出最大限制

ZeroDivisionError    除(或取模)零 (所有数据类型)

AssertionError    断言语句失败

AttributeError    对象没有这个属性

EOFError    没有内建输入,到达EOF 标记

EnvironmentError    操作系统错误的基类

IOError    输入/输出操作失败

OSError    操作系统错误

WindowsError    系统调用失败

ImportError    导入模块/对象失败

LookupError    无效数据查询的基类

IndexError    序列中没有此索引(index)

KeyError    映射中没有这个键

MemoryError    内存溢出错误(对于Python 解释器不是致命的)

NameError    未声明/初始化对象 (没有属性)

UnboundLocalError    访问未初始化的本地变量

ReferenceError    弱引用(Weak reference)试图访问已经垃圾回收了的对象

RuntimeError    一般的运行时错误

NotImplementedError    尚未实现的方法

SyntaxError    Python 语法错误

IndentationError    缩进错误

TabError    Tab 和空格混用

SystemError    一般的解释器系统错误

TypeError    对类型无效的操作

ValueError    传入无效的参数

UnicodeError    Unicode 相关的错误

UnicodeDecodeError    Unicode 解码时的错误

UnicodeEncodeError    Unicode 编码时错误

UnicodeTranslateError    Unicode 转换时错误

Warning    警告的基类

DeprecationWarning    关于被弃用的特征的警告

FutureWarning    关于构造将来语义会有改变的警告

OverflowWarning    旧的关于自动提升为长整型(long)的警告

PendingDeprecationWarning    关于特性将会被废弃的警告

RuntimeWarning    可疑的运行时行为(runtime behavior)的警告

SyntaxWarning    可疑的语法的警告

UserWarning    用户代码生成的警告

 

try:
    n=1/0
except  ZeroDivisionError:
  print("除数不能为0")
print("程序结束")
#------------------------------------------------------------
try:
    a = int(input("请输入被除数:"))
    b = int(input("请输入除数:"))
    c=a/b
except ValueError :
    print("请输入数字")

except  ZeroDivisionError:
  print("除数不能为0")
except Exception:
    print("")
else:
    print("结束程序22222")
print("程序结束")
#请用户输入被除数、除数、然后计算相除的结果

#------------------------------------------

def testError():
    n=1/0
def exceptionflest():
    try:
        testError()
    except ZeroDivisionError:
        print("除数不能为0")
def test3():
    exceptionflest
exceptionflest()
#--------------------------------------
#定义一个方法:方法如下,在此方法体内不进行异常处理 定义一个列表list1 通过下标访问最后一个元素,list1{list1,length},定义一个调用的方法捕获方法def

def test():
    list1=[1,2,3,4]
    list1[(len(list1))]
def testError():
    try:
        test()
    except IndexError as ie:
        print("下标超界")
        print(ie)
testError()
#-----------------------
#判断男女否则输出异常
class sexException(Exception):
    pass
def dosex():
     sex=input("请输入性别")
     if sex!='男' and sex!='女':
        raise sexException("性别只能为男或女")
try:
    dosex()
except sexException as se:
    print(se)
#--------------------------------------------


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章