浅谈Python的异常处理,python异常处理

by admin on 2019年9月2日

Python开发【第七章】:Python异常处理,python异常处理

一、异常处理

1、异常基础

在编程过程中为了增加友好性,在程序出现bug时一般不会将错误信息显示给用户,而是现实一个提示的页面,通俗来说就是不让用户看见大黄页!!!

#异常处理

list = ["hello","world"]
try:
    list[3]
except IndexError as e:
    print("IndexError",e)

# IndexError list index out of range

上面程序表示try里面的代码如果出现IndexError这种错误,则执行except下面的代码,不会把错误信息显示给用户,程序也不会停止;目前只能处理IndexError这一种异常,想处理多种异常还可以这么写:

#多种异常处理

list = ["hello","world"]
try:
    list[3]
except IndexError as e:
    print("IndexError",e)

except KeyError as e:
    print("KeyError", e)

except ValueError as e:
    print("ValueError",e)

# IndexError list index out of range

万能异常 在python的异常中,有一个万能异常:Exception,他可以捕获任意异常

#万能异常处理

list = ["hello","world"]
try:
    list[3]
except Exception as e:
    print("Error",e)

#Error list index out of range

威尼斯人在线投注 1AttributeError
试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x IOError
输入/输出异常;基本上是无法打开文件 ImportError
无法引入模块或包;基本上是路径问题或名称错误 IndentationError
语法错误(的子类) ;代码没有正确对齐 IndexError
下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5] KeyError
试图访问字典里不存在的键 KeyboardInterrupt Ctrl+C被按下 NameError
使用一个还未被赋予对象的变量 SyntaxError
Python代码非法,代码不能编译(个人认为这是语法错误,写错了) TypeError
传入对象类型与要求的不符合 UnboundLocalError
试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
导致你以为正在访问它 ValueError
传入一个调用者不期望的值,即使值的类型是正确的 常用异常
威尼斯人在线投注 1ArithmeticError
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 更多异常

 

威尼斯人在线投注,2、异常的其他结构

#异常的其他结构

try:
    # 主代码块
    pass
except KeyError as e:
    # 异常时,执行该块
    pass
else:
    # 主代码块执行完,执行该块
    pass
finally:
    # 无论异常与否,最终执行该块
    pass

 

3、自定义异常  

主动触发异常

#主动触发异常

try:
    raise Exception('错误了。。。')
except Exception as e:
    print(e)

#错误了。。。

自定义异常

#自定义异常

class Diyexception(Exception):
    def __init__(self, msg):
        self.message = msg

    def __str__(self):
        return self.message

error = Diyexception("报错了....")

try:
    raise error

except Diyexception as e:
    print(e)

#报错了....

  

一、异常处理 1、异常基础
在编程过程中为了增加友好性,在程序出现bug时一般不会将…

Python异常处理,python异常

异常处理

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

示例:

try:
  code
except Exception,e:
  print e

异常处理
AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
IOError 输入/输出异常;基本上是…

Python异常处理总结,python异常处理

本文较为详细的罗列了Python常见的异常处理,供大家参考,具体如下:

1. 抛出异常和自定义异常

Python用异常对象(exception
object)表示异常情况,遇到错误后,会引发异常。如果异常对象并未被处理或捕捉,程序就会用所谓的回溯(Traceback,一种错误信息)终止执行。

①.raise 语句

Python中的raise
关键字用于引发一个异常,基本上和C#和Java中的throw关键字相同,如下所示:

# -- coding: utf-8 --

def ThorwErr():
  raise Exception("抛出一个异常")

# Exception: 抛出一个异常
ThorwErr()

raise关键字后面是抛出是一个通用的异常类型(Exception),一般来说抛出的异常越详细越好,Python在exceptions模块内建了很多的异常类型,通过使用dir函数来查看exceptions中的异常类型,如下:

import exceptions

# ['ArithmeticError', 'AssertionError'.....]
print dir(exceptions)

传递异常

捕捉到了异常,但是又想重新引发它(传递异常),可以使用不带参数的raise语句即可:

# -- coding: utf-8 --
class MuffledCalculator:
  muffled = False
  def calc(self,expr):
    try:
      return eval(expr)
    except ZeroDivisionError:
      if self.muffled:
        print 'Division by zero is illegal'
      else:
        raise

②.自定义异常类型

Python中也可以自定义自己的特殊类型的异常,只需要要从Exception类继承(直接或间接)即可:

class SomeCustomException(Exception):
  pass

2. 捕捉异常

和C#中的try/catch类似,Python中使用try/except关键字来捕捉异常,如下:

# -- coding: utf-8 --

try:
  print 2/0
except ZeroDivisionError:
  print '除数不能为0'

①.捕捉多个异常

在一个except语句只捕捉其后声明的异常类型,如果可能会抛出的是其他类型的异常就需要再增加一个except语句了,或者也可以指定一个更通用的异常类型比如:Exception,如下:

# -- coding: utf-8 --
try:
  print 2/'0'
except ZeroDivisionError:
  print '除数不能为0'
except Exception:
  print '其他类型异常'

为了捕获多个异常,除了声明多个except语句之外,还可以在一个except语句之后将多个异常作为元组列出来即可:

# -- coding: utf-8 --
try:
  print 2/'0'
except (ZeroDivisionError,Exception):
  print '发生了一个异常'

②.获取异常信息

每个异常都会有一些异常信息,一般情况下我们应该把这些异常信息记录下来:

# -- coding: utf-8 --
try:
  print 2/'0'
except (ZeroDivisionError,Exception) as e:
  # unsupported operand type(s) for /: 'int' and 'str'
  print e

3. finally子句

finally子句和try子句联合使用但是和except语句不同,finally不管try子句内部是否有异常发生,都会执行finally子句内的代码。所有一般情况下,finally自己常常用于关闭文件或者在Socket中。

# -- coding: utf-8 --
try:
  print 2/'0'
except (ZeroDivisionError,Exception):
  print '发生了一个异常'
finally:
  print '不管是否发生异常都执行'

Python学习——异常处理,python异常处理

1.异常基础:

  在编程过程中为了增加友好性,在程序出现bug时一般不会将错误信息显示给用户,而是现实一个提示的页面

基本语法:

1 try:
2     pass
3 except Exception as e:
4 
5     print(e)

实例:两个数的相加

 1 while True:
 2     num1 = input('num1:')
 3     num2 = input('num2:')
 4     try:
 5         num1 = int(num1)
 6         num2 = int(num2)
 7         result = num1 + num2
 8     except Exception as e:
 9         print ('出现异常,信息如下:')
10         print (e)

2.异常种类

python中的异常种类非常多,每个异常专门用于处理某一项异常!!!

常用异常:

 1 AttributeError 试图访问一个对象没有的属性,比如foo.x,但是foo没有属性x
 2 IOError 输入/输出异常;基本上是无法打开文件
 3 ImportError 无法引入模块或包;基本上是路径问题或名称错误
 4 IndentationError 语法错误(的子类) ;代码没有正确对齐
 5 IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
 6 KeyError 试图访问字典里不存在的键
 7 KeyboardInterrupt Ctrl+C被按下
 8 NameError 使用一个还未被赋予对象的变量
 9 SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
10 TypeError 传入对象类型与要求的不符合
11 UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
12 导致你以为正在访问它
13 ValueError 传入一个调用者不期望的值,即使值的类型是正确的

实例一:IndexError

1 dic = ["haha", 'hehe']
2 try:
3     dic[10]
4 except IndexError as e:
5     print(e)     # list index out of range

实例二:ValueError

1 s1 = 'hello'
2 try:
3     int(s1)
4 except ValueError as e:
5     print(e)   # invalid literal for int() with base 10: 'hello'

对于上述实例,异常类只能用来处理指定的异常情况,如果非指定异常则无法处理。

1 s1 = 'hello'
2 try:
3     int(s1)
4 except IndexError as e:
5     print(e)   # 未捕获到异常,程序直接报错

此时需要考虑到程序代码中可能出现的任意异常

1 s1 = 'hello'
2 try:
3     int(s1)
4 except IndexError as e:
5     print(e)
6 except KeyError as e:
7     print(e)
8 except ValueError as e:
9     print(e)

但在python的异常中,有一个万能异常:Exception,他可以捕获任意异常,即:

1 s1 = 'hello'
2 try:
3     int(s1)
4 except Exception as e:
5     print(e)

有这个万能异常,但其他异常不可以忽略,一般对于特殊处理或提醒的异常需要先定义,最后定义Exception来确保程序正常运行

1 s1 = 'hello'
2 try:
3     int(s1)
4 except KeyError as e:
5     print( '键错误')
6 except IndexError as e:
7     print ('索引错误')
8 except Exception, as e:
9     print ('错误')

 

1.异常基础:
在编程过程中为了增加友好性,在程序出现bug时一般不会将错误信息显示给用户,而是…

浅谈Python的异常处理,python异常处理

 Python的异常处理能力是很强大的,可向用户准确反馈出错信息。在Python中,异常也是对象,可对它进行操作。所有异常都是基类Exception的成员。所有异常都从基类Exception继承,而且都在exceptions模块中定义。Python自动将所有异常名称放在内建命名空间中,所以程序不必导入exceptions模块即可使用异常。Python用异常对象(exception
object)表示异常情况,遇到错误后,会引发异常。如果异常对象并未被处理或捕捉,程序就会用所谓的回溯(Traceback,一种错误信息)终止执行。

注意:虽然大多数错误会导致异常,但一个异常不一定代表错误,有时候它们只是一个警告,有时候它们可能是一个终止信号,比如退出循环等。

一.与python异常相关的关键字

raise:手动抛出/引发异常:raise [exception[,data]
try/except:捕获异常并处理
pass:忽略异常
as:定义异常实例(except IOError as e)
finally:无论是否出现异常,都执行的代码]
else:如果try中的语句没有引发异常,则执行else中的语句
except Exception as error:

二.python中的异常类型

1.StandardError类:如果程序上出现逻辑错误,
将引发该异常。StandardError类是所有内敛异常的基类,放置在默认的命名空间中,因此使用IOEroor,
EOFError, ImportError等类,不需要导入exception模块。

StopIteration类:判断循环是否执行到尾部,如果循环到尾部,则抛出该异常。
GeneratorExit类:是由Generator函数引发的异常,当调用close()时引发该异常。
Warning类:表示程序中的代码引起的警告。

三.基本方式:

1.try:

        语句1

  except  [exception1(,exception2…),[data…]]:

       语句2

  else:

       语句3

该种异常处理语法的规则是:

·   执行try下的语句,如果引发异常,则执行过程会跳到第一个except语句。

·  
如果第一个except中定义的异常与引发的异常匹配,则执行该except中的语句。

·  
如果引发的异常不匹配第一个except,则会搜索第二个except,允许编写的except数量没有限制。

·  
如果所有的except都不匹配,则异常会传递到下一个调用本代码的最高层try代码中。

·   如果没有发生异常,则执行else块代码。

import traceback
try:
  1/0
except Exception as err:
  print(err)
try:
  f = open("file.txt","r")
except IOError as e:
  print(e)
try:
  f = open("file.txt","r")
except Exception as e:
  print(e)

 最后两个的输出是一模一样的—————————————————————————————————————————————————————————————————————————

2.try:

      语句1

  finally:

      语句2

该语句的执行规则是:

·   执行try下的代码。

·   如果发生异常,在该异常传递到下一级try时,执行finally中的代码。

·   如果没有发生异常,则执行finally中的代码。

第二种try语法在无论有没有发生异常都要执行代码的情况下是很有用的。例如我们在python中打开一个文件进行读写操作,我在操作过程中不管是否出现异常,最终都是要把该文件关闭的。这两种形式相互冲突,使用了一种就不允许使用另一种,而功能又各异

所以,一般情况下,finally里面执行的都是一些清理工作,比如:关闭文件描述符,释放锁等

注意,finally中,如果出现异常,外部如果没有相应的捕获机制,该异常会层层抛出,直到最顶端,然后解释器停止。一般在外层再加一次try
except异常捕获

三.手动使用raise引发异常

1.raise [exception[,data]]

2.在Python中,要想引发异常,最简单的形式就是输入关键字raise,后跟要引发的异常的名称。异常名称标识出具体的类:Python异常是那些类的对象。执行raise语句时,Python会创建指定的异常类的一个对象。raise语句还可指定对异常对象进行初始化的参数。为此,请在异常类的名称后添加一个逗号以及指定的参数(或者由参数构成的一个元组)。

3.实例:

try:
  print("开始测试")
  raise IOError
except IOError:
  print("定义好的错误")
except:
  print("别的错误")

Python的异常处理能力是很强大的,可向用户准确反馈出错信息。在Python中,异常也是对象,可对它进行…

python异常处理

try后面接except或finally这两个只能用一个,用了except就不能用finally
 

python异常处理

while True:
n = raw_input(“Input a number between 2 and 6”)
try:
n=int(n)
except Exception:
print “no”
continue
if n >= 2 and n <= 6:
print “ok”,n
else:
print “no”
continue
 

本文较为详细的罗列了Python常见的异常处理,供大家参考,具体如下: 1.
抛出异常和自定义异常 Python用…

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图