返回顶部
首页 > 资讯 > 后端开发 > Python >Python基础之(九)错误和异常
  • 707
分享到

Python基础之(九)错误和异常

异常错误基础 2023-01-31 07:01:14 707人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

>>> for i in range(10) File "<stdin>", line 1 for i in range(10) ^ SyntaxError:

>>> for i in range(10)
 File "<stdin>", line 1
   for i in range(10)
                    ^
SyntaxError: invalid syntax

上面那句话因为缺少冒号:,导致解释器无法解释,于是报错。这个报错行为是由python的语法分析器完成的,并且检测到了错误所在文件和行号(File "<stdin>", line 1),还以向上箭头^标识错误位置(后面缺少:),最后显示错误类型。

另一种常见错误是逻辑错误。逻辑错误可能是由于不完整或者不合法的输入导致,也可能是无法生成、计算等,或者是其它逻辑问题。

Python检测到一个错误时,解释器就无法继续执行下去,于是抛出提示信息,即为异常。

下表中列出常见的异常

异常 描述
NameError 尝试访问一个没有申明的变量
ZeroDivisionError 除数为0
SyntaxError 语法错误
IndexError 索引超出序列范围
KeyError 请求一个不存在的字典关键字
IOError 输入输出错误(比如你要读的文件不存在)
AttributeError 尝试访问未知的对象属性

NameError

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

Python中变量虽然不需在使用变量之前先声明类型,但也需要对变量进行赋值,然后才能使用。不被赋值的变量,不能再Python中存在,因为变量相当于一个标签,要把它贴到对象上才有意义。

ZeroDivisionError

>>> 1/0
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero

SyntaxError

    >>> for i in range(10)
      File "<stdin>", line 1
        for i in range(10)
                         ^
    SyntaxError: invalid syntax

这种错误发生在Python代码编译的时候,当编译到这一句时,解释器不能讲代码转化为Python字节码,就报错。

IndexError和KeyError

    >>> a = [1,2,3]
    >>> a[4]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    IndexError: list index out of range
    
    >>> d = {"python":"itdiffer.com"}
    >>> d["java"]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    KeyError: 'java'

IOError

    >>> f = open("foo")
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    IOError: [Errno 2] No such file or directory: 'foo'

AttributeError

    >>> class A(object): pass        #Python 3: class A: pass
    ... 
    >>> a = A()
    >>> a.foo
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: 'A' object has no attribute 'foo'
#!/usr/bin/env python
# coding=utf-8

while 1:
   print "this is a division program."
   c = raw_input("input 'c' continue, otherwise loGout:")
   if c == 'c':
       a = raw_input("first number:")
       b = raw_input("second number:")
       try:
           print float(a)/float(b)
           print "*************************"
       except ZeroDivisionError:
           print "The second number can't be zero!"
           print "*************************"
   else:
       break

try...except

对于上述程序,只看tryexcept部分,如果没有异常发生,except子句在try语句执行之后被忽略;如果try子句中有异常可,该部分的其它语句被忽略,直接跳到except部分,执行其后面指定的异常类型及其子句。

except后面也可以没有任何异常类型,即无异常参数。如果这样,不论try部分发生什么异常,都会执行except

except子句中,可以根据异常或者别的需要,进行更多的操作。比如:

#!/usr/bin/env python
# coding=utf-8

class Calculator(object):
   is_raise = True
   def calc(self, express):
       try:
           return eval(express) #运行表达式
       except ZeroDivisionError:
           if self.is_raise:
               print "zero can not be division."        #Python 3:  "zero can not be division."
           else:
               raise #抛出异常信息

处理多个异常

Python 2:

    #!/usr/bin/env python
    # coding=utf-8

    while 1:
        print "this is a division program."
        c = raw_input("input 'c' continue, otherwise logout:")
        if c == 'c':
            a = raw_input("first number:")
            b = raw_input("second number:")
            try:
                print float(a)/float(b)
                print "*************************"
            except ZeroDivisionError:
                print "The second number can't be zero!"
                print "*************************"
            except ValueError:
                print "please input number."
                print "************************"
        else:
            break
            
 or
 
except (ZeroDivisionError, ValueError): #括号内也可以包含多个异常
   print "please input rightly."
   print "********************"

打印异常,但程序不中断

    while 1:
        print "this is a division program."
        c = raw_input("input 'c' continue, otherwise logout:")
        if c == 'c':
            a = raw_input("first number:")
            b = raw_input("second number:")
            try:
                print float(a)/float(b)
                print "*************************"
            except (ZeroDivisionError, ValueError), e: #类似java
                print e
                print "********************"
        else:
            break

Python 3:

    while 1:
        print("this is a division program.")
        c = input("input 'c' continue, otherwise logout:")
        if c == 'c':
            a = input("first number:")
            b = input("second number:")
            try:
                print(float(a)/float(b))
                print("*************************")
            except (ZeroDivisionError, ValueError) as e:
                print(e)
                print("********************")
        else:
            break

else语句

    >>> try:
    ...     print "I am try"        #Python 3: print("I am try"),
    ... except:                
    ...     print "I am except"
    ... else:                     #处理except就不会运行else
    ...     print "I am else"
    ... 
    I am try
    I am else

else语句应用,只有输入正确的内容,循环才会终止

    #!/usr/bin/env python
    # coding=utf-8
    while 1:
        try:
            x = raw_input("the first number:")
            y = raw_input("the second number:")

            r = float(x)/float(y)
            print r
        except Exception, e:  #python3为 Exception as e:
            print e
            print "try again."
        else:
            break

finally语句

如果有了finally,不管前面执行的是try,还是except,最终都要执行它。类似java

    >>> x = 10

    >>> try:
    ...     x = 1/0
    ... except Exception, e:        #Python 3:  except Exception as e:
    ...     print e        #Python 3: print(e)
    ... finally:
    ...     print "del x"        #Python 3:  print(e)
    ...     del x
    ... 
    integer division or modulo by zero
    del x

assert

assert是一句等价于布尔真的判定,发生异常就意味着表达式为假。当程序运行到某个节点的时候,就断定某个变量的值必然是什么,或者对象必然拥有某个属性等,简单说就是断定什么东西必然是什么,如果不是,就抛出异常。

#!/usr/bin/env python
# coding=utf-8
            
if __name__ == "__main__":
    a = 8
    assert a < 0
    print a
    
Traceback (most recent call last):
  File "/Users/liuguoquan/Documents/workspace/PythonDemo/main.py", line 6, in <module>
    assert a < 0
AssertionError

这就是断言assert的引用。什么是使用断言的最佳时机?有文章做了总结

如果没有特别的目的,断言应该用于如下情况:

  • 防御性的编程

  • 运行时对程序逻辑的检测

  • 合约性检查(比如前置条件,后置条件)

  • 程序中的常量

  • 检查文档

--结束END--

本文标题: Python基础之(九)错误和异常

本文链接: https://lsjlt.com/news/192287.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python基础之(九)错误和异常
    >>> for i in range(10) File "<stdin>", line 1 for i in range(10) ^ SyntaxError:...
    99+
    2023-01-31
    异常 错误 基础
  • python基础之错误和异常处理
    import Exception # except 在捕获错误异常的时候 是要根据具体的错误类型来捕获的 # 用一个块 可以捕获多个不同类型的异常 # EXception ...
    99+
    2024-04-02
  • Python基础之语法错误和异常详解
    目录一、前言二、异常三、异常处理3.1 try/except3.2 try/except ... else3.3 try-finally四、抛出异常4.1 raise五、用户自定义异...
    99+
    2024-04-02
  • Python基础教程之错误和异常的处理方法
    目录前言异常与错误的概念错误分类语法错误运行时错误逻辑错误异常处理机制捕获异常并处理主动抛出异常断言处理自定义异常类常见异常及释义附:用户自定义异常实例总结前言 继续更新Python...
    99+
    2024-04-02
  • python错误和异常
    一:语法错误syntax errors        熟悉语法!二:异常    ①打印错误信息时,异常的类型作为异常的内置名显示,并以调用栈的形式显示具体信息    ②常见的异常:            NameError、       ...
    99+
    2023-01-30
    异常 错误 python
  • python基础之文件操作和异常处理
    目录一、文件和异常1.1从文件中读取数据1.2open()1.3关键字with1.4read()二、逐行读取三、创建一个包含文件各行内容的列表3.1readlines()四、查找字符...
    99+
    2024-04-02
  • Python 错误和异常小结
    1.Python异常类 Python是面向对象语言,所以程序抛出的异常也是类。常见的Python异常有以下几个,大家只要大致扫一眼,有个映像,等到编程的时候,相信大家肯定会不只一次跟他们照面(除非你不用Python了)。异常描述NameEr...
    99+
    2023-01-31
    小结 异常 错误
  • Python常遇到的错误和异常
    目录1、语法错误2、异常3、异常处理4、try/except...else5、try-finally 语句6、抛出异常7、用户自定义异常在日常的学习Python过程中,由于本身的编程...
    99+
    2024-04-02
  • Python基础:异常处理
    如何处理异常   无论发生什么情况,finally block 中的语句都会被执行,哪怕前面的 try 和 excep block 中使用了 return 语句。 import sys try: f = open('file....
    99+
    2023-01-31
    异常 基础 Python
  • Python基础教程之异常处理详解
    目录前言异常错误与异常语法错误异常异常处理自主抛出异常自定义异常finally子句总结前言 最近发现有些东西长时间不用就要忘了,坚持每天复习总结一个小知识点吧~ 异常是什么呢?就是在...
    99+
    2023-05-14
    python如何进行异常处理 python 异常 python程序异常处理例题
  • golang错误和异常
    Golang是一种高效、简洁、强类型的编程语言,得益于其独特的设计哲学和简单的语法,Golang越来越受到开发者们的青睐。然而,就像其他任何编程语言一样,Golang也会出现各种错误和异常。在本文中,我们将探讨Golang中的错误和异常处理...
    99+
    2023-05-14
  • Python3 错误和异常
    Edit笔记内容:Python3 错误和异常 笔记日期:2017-11-12Python3 错误和异常语法错误异常异常处理抛出异常用户自定义异常finally语句预定义的清理行为异常处理机制概述: 异常处理,是编程语言或计算机硬件里的一种机...
    99+
    2023-01-31
    异常 错误
  • ASP.NETCore基础之异常中间件
    了解异常中间件 首先,使用ASP.NET模板创建一个核心应用程序。默认情况下,ASP.NET核心应用程序只是返回应用程序未处理的异常的状态代码。如下所示,我们引发异常。 运行应用程...
    99+
    2024-04-02
  • Python错误和异常总结详细
    目录1、语法错误2、异常3、try...except...语句4、多个except子句5、try...except Exception as e语句6、try...except......
    99+
    2024-04-02
  • Java基础之异常处理详解
    目录Exception 类的层次Java 内置异常类异常方法捕获异常throws/throw 关键字finally关键字try-with-resources声明自定义异常通用异常异常...
    99+
    2023-05-17
    Java异常处理机制 Java异常处理 Java异常
  • Python异常对象Exception基础类异常捕捉
    目录异常对象异常捕捉异常对象 Python中遇到错误后,会引发异常。 Python中使用异常对象来表示异常情况。 如果异常对象未被处理或者捕捉,程序就会用所谓的回溯(tracebac...
    99+
    2024-04-02
  • Python数据分析基础之异常值检测和处理方式
    目录1 什么是异常值?2 异常值的检测方法1. 简单统计2. 3∂原则3. 箱型图4. 基于模型检测5. 基于近邻度的离群点检测6. 基于聚类的方法来做异常点检测7. 专门...
    99+
    2024-04-02
  • Python基础中所出现的异常报错总结
    今天我们来探索python中大部分的异常报错 首先异常是什么,异常白话解释就是不正常,程序里面一般是指程序员输入的格式不规范,或者需求的参数类型不对应,不全等等。 打个比方很多公司年终送苹果笔记本,你程序...
    99+
    2022-06-04
    报错 异常 基础
  • Python错误与异常处理
    1. 从键盘输入一个整数,求 100 除以它的商,并显示输出。要求对从键盘输入的数值进行异常处理。 try:     n=int(input("请输入一个整数:"))     x=1...
    99+
    2024-04-02
  • Python基础入门之魔法方法与异常处理
    目录一.魔法方法1.属性访问2.描述符3.定制序列5.生成器二.异常处理1.异常类型2.try-except语句3.try-finally语句4.raise语句5.丰富的else语句...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作