精华内容
下载资源
问答
  • python 异常捕捉并处理
    2020-12-02 14:37:36

    初学python-flask后端

    在学长的代码里经常能够看到以下有些难以理解的片段

    try:

    #直接开始执行try,此处在上下文标记,如果在以下的程序中产生了异常,就会回到这里

    db.session.add_all(s_list) #把修改加入session

    db.session.commit() #提交

    return student_paper_id #返回

    #随机组成的试卷存在student_paper_id

    except Exception as e :

    print(e)

    db.session.rollback()

    return const_code.STUDENT_PAPER_CODE['FAILED']

    假如说,try的子句中出现了异常,则跳回到try,并执行第一个匹配该异常的except子句,在except中对异常进行处理

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

    except (RuntimeError, TypeError, NameError):

    pass

    Exception是一个异常类,这个Exception可以由自己定义,

    Exception as e则是将这个类建立一个instance实例,

    print(e) 打印e的内容

    db.session.rollback() 因为在session中添加出现错误,于是把session回滚到添加之前的状态防止错误的数据添加

    直接return 返回自定义的错误代码

    由此示例 我们可以得知 try ex的方法

    就是在try中尝试运行,假若出现了异常,则进入ex进行异常处理,这是一个非常缜密的编程习惯,在牵扯到用户数据的地方使用,可以有效地防止坏数据污染数据库,并且给出msg,便于维护 。

    常用异常名

    AttributeError 调用不存在的方法引发的异常

    EOFError    遇到文件末尾引发的异常

    ImportError 导入模块出错引发的异常

    IndexError    列表越界引发的异常

    IOError    I/O操作引发的异常,如打开文件出错等

    KeyError  使用字典中不存在的关键字引发的异常

    NameError 使用不存在的变量名引发的异常

    TabError 语句块缩进不正确引发的异常

    ValueError 搜索列表中不存在的值引发的异常

    ZeroDivisionError   除数为零引发的异常

    常常使用raise

    raise 异常名

    raise 异常名,数据

    raise 类名

    更多相关内容
  • python捕捉异常

    2021-02-04 00:54:35
    for循环会自动捕捉到这个异常并停止调用next()。你知不知道Python中一些内置数据类型也支持迭代哦?我们这就去看看: my_string = "Yasoob" next(my_string) # Output: Traceback (most recent call last): # File ...

    生成器也是一种迭代器,但是你只能对其迭代一次。这是因为它们并没有把所有的值存在内存中,而是在运行时生成值。你通过遍历来使用它们,要么用一个“for”循环,要么将它们传递给任意可以进行迭代的函数和结构。大多数时候生成器是以函数来实现的。然而,它们并不返回一个值,而是yield(暂且译作“生出”)一个值。这里有个生成器函数的简单例子:

    def generator_function():

    for i in range(10):

    yield i

    for item in generator_function():

    print(item)

    # Output: 0

    # 1

    # 2

    # 3

    # 4

    # 5

    # 6

    # 7

    # 8

    # 9

    这个案例并不是非常实用。生成器最佳应用场景是:你不想同一时间将所有计算出来的大量结果集分配到内存当中,特别是结果集里还包含循环。

    译者注:这样做会消耗大量资源

    许多Python 2里的标准库函数都会返回列表,而Python 3都修改成了返回生成器,因为生成器占用更少的资源。 下面是一个计算斐波那契数列的生成器:

    # generator version

    def fibon(n):

    a = b = 1

    for i in range(n):

    yield a

    a, b = b, a + b

    函数使用方法如下:

    for x in fibon(1000000):

    print(x)

    用这种方式,我们可以不用担心它会使用大量资源。然而,之前如果我们这样来实现的话:

    def fibon(n):

    a = b = 1

    result = []

    for i in range(n):

    result.append(a)

    a, b = b, a + b

    return result

    这也许会在计算很大的输入参数时,用尽所有的资源。我们已经讨论过生成器使用一次迭代,但我们并没有测试过。在测试前你需要再知道一个Python内置函数:next()。它允许我们获取一个序列的下一个元素。那我们来验证下我们的理解:

    def generator_function():

    for i in range(3):

    yield i

    gen = generator_function()

    print(next(gen))

    # Output: 0

    print(next(gen))

    # Output: 1

    print(next(gen))

    # Output: 2

    print(next(gen))

    # Output: Traceback (most recent call last):

    # File "", line 1, in

    # StopIteration

    我们可以看到,在yield掉所有的值后,next()触发了一个StopIteration的异常。基本上这个异常告诉我们,所有的值都已经被yield完了。你也许会奇怪,为什么我们在使用for循环时没有这个异常呢?啊哈,答案很简单。for循环会自动捕捉到这个异常并停止调用next()。你知不知道Python中一些内置数据类型也支持迭代哦?我们这就去看看:

    my_string = "Yasoob"

    next(my_string)

    # Output: Traceback (most recent call last):

    # File "", line 1, in

    # TypeError: str object is not an iterator

    好吧,这不是我们预期的。这个异常说那个str对象不是一个迭代器。对,就是这样!它是一个可迭代对象,而不是一个迭代器。这意味着它支持迭代,但我们不能直接对其进行迭代操作。那我们怎样才能对它实施迭代呢?是时候学习下另一个内置函数,iter。它将根据一个可迭代对象返回一个迭代器对象。这里是我们如何使用它:

    my_string = "Yasoob"

    my_iter = iter(my_string)

    next(my_iter)

    # Output: 'Y'

    现在好多啦。我肯定你已经爱上了学习生成器。一定要记住,想要完全掌握这个概念,你只有使用它。确保你按照这个模式,并在生成器对你有意义的任何时候都使用它。你绝对不会失望的!

    展开全文
  • 异常捕捉: try: XXXXX1 raise Exception(“xxxxx2”) except (Exception1,Exception2,……): xxxx3 else: xxxxx4 finally: xxxxxxx5 1.raise 语句可以自定义报错信息,如上。 2. raise后的语句是不会被...
  • python异常,以及用try复合语句处理异常。 运行代码时有时会出现各种各样的错误,致使解析器中断执行,并提示xxxxxxErorr的提示,后面跟具体的错误的描述,这被称为是引发了异常。 其实异常告诉我们的是遇到了什么...
  • try: num1 = int(input("请输入num1的值:")) num2 = int(input("请输入num2的值:")) op1 = input("请输入op1的值:") if op1 == "+": print(num1 + num2) elif op1 == "-": print(num1 - num2) ...
    try:
        num1 = int(input("请输入num1的值:"))
        num2 = int(input("请输入num2的值:"))
        op1 = input("请输入op1的值:")
        if op1 == "+":
            print(num1 + num2)
        elif op1 == "-":
            print(num1 - num2)
        elif op1 == "*":
            print(num1 * num2)
        elif op1 == "/":
            print(num1 / num2)
        else:
            print("op1值不对")
    except ValueError:
            print("请输入一个可以转化为整数的数")
    except ZeroDivisionError:
        print("除数不能为0")
    except:
        print("未知错误")
    
    展开全文
  • Python 捕获异常

    千次阅读 2022-02-03 23:33:44
    程序在运行时,如果 Python 解释器 遇到 到一个错误,会停止程序的执行,并且提示一些错误信息,这就是 异常 程序停止执行并且提示错误信息 这个动作,我们通常称之为:抛出(raise)异常 常见异常 异常类型...

    异常

    目标

    • 异常的概念
    • 捕获异常
    • 异常的传递
    • 抛出异常

    01. 异常的概念

    • 程序在运行时,如果 Python 解释器 遇到 到一个错误,会停止程序的执行,并且提示一些错误信息,这就是 异常

    • 程序停止执行并且提示错误信息 这个动作,我们通常称之为:抛出(raise)异常

    • 常见异常

    异常类型含义
    AssertionErrorassert 关键字后的条件为假时,程序运行会停止并抛出 AssertionError 异常
    AttributeError当试图访问的对象属性不存在时抛出的异常
    IndexError索引超出序列范围会引发此异常
    KeyError字典中查找一个不存在的关键字时引发此异常
    NameError尝试访问一个未声明的变量时,引发此异常
    TypeError不同类型数据之间的无效操作
    ZeroDivisionError除法运算中除数为 0 引发此异常

    程序开发时,很难将 所有的特殊情况 都处理的面面俱到,通过 异常捕获 可以针对突发事件做集中的处理,从而保证程序的 稳定性和健壮性

    当一个程序发生异常时,代表该程序在执行时出现了非正常的情况,无法再执行下去。默认情况下,程序是要终止的。如果要避免程序退出,可以使用捕获异常的方式获取这个异常的名称,再通过其他的逻辑代码让程序继续运行,这种根据异常做出的逻辑处理叫作异常处理。

    02. 捕获异常

    • 在实际开发中,为了能够处理复杂的异常情况,完整的异常语法如下:
    try:
        # 尝试执行的代码
        pass
    except 错误类型1:
        # 针对错误类型1,对应的代码处理
        pass
    except 错误类型2:
        # 针对错误类型2,对应的代码处理
        pass
    except (错误类型3, 错误类型4):
        # 针对错误类型3 和 4,对应的代码处理
        pass
    except Exception as result:
        # 打印错误信息
        print(result)
    else:
        # 没有异常才会执行的代码
        pass
    finally:
        # 无论是否有异常,都会执行的代码
        print("无论是否有异常,都会执行的代码")
    
    • else 只有在没有异常时才会执行的代码
    • finally 无论是否有异常,都会执行的代码

    03. 异常的传递

    • 异常的传递 —— 当 函数/方法 执行 出现异常,会 将异常传递 给 函数/方法 的 调用一方
    • 如果 传递到主程序,仍然 没有异常处理,程序才会被终止

    提示

    • 在开发中,可以在主函数中增加 异常捕获
    • 而在主函数中调用的其他函数,只要出现异常,都会传递到主函数的 异常捕获
    • 这样就不需要在代码中,增加大量的 异常捕获,能够保证代码的整洁

    04. 抛出 raise 异常

    4.1 应用场景

    • 在开发中,除了 代码执行出错 Python 解释器会 抛出 异常之外
    • 还可以根据 应用程序 特有的业务需求 主动抛出异常

    4.2 基本语法格式

    raise 语句的基本语法格式为:

    raise [exceptionName [(reason)]]

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

    也就是说,raise 语句有如下三种常用的用法:

    1. raise:单独一个 raise。该语句引发当前上下文中捕获的异常(比如在 except 块中),或默认引发 RuntimeError 异常。
    2. raise 异常类名称:raise 后带一个异常类名称,表示引发执行类型的异常。
    3. raise 异常类名称(描述信息):在引发指定类型的异常的同时,附带异常的描述信息。

    显然,每次执行 raise 语句,都只能引发一次执行的异常。首先,我们来测试一下以上 3 种 raise 的用法:

    >>> raise
    Traceback (most recent call last):
      File "<pyshell#1>", line 1, in <module>
        raise
    RuntimeError: No active exception to reraise
    >>> raise ZeroDivisionError
    Traceback (most recent call last):
      File "<pyshell#0>", line 1, in <module>
        raise ZeroDivisionError
    ZeroDivisionError
    >>> raise ZeroDivisionError("除数不能为零")
    Traceback (most recent call last):
      File "<pyshell#2>", line 1, in <module>
        raise ZeroDivisionError("除数不能为零")
    ZeroDivisionError: 除数不能为零
    

    当然,我们手动让程序引发异常,很多时候并不是为了让其崩溃。事实上,raise 语句引发的异常通常用 try except(else finally)异常处理结构来捕获并进行处理。例如:

    try:
        a = input("输入一个数:")
        #判断用户输入的是否为数字
        if(not a.isdigit()):
            raise ValueError("a 必须是数字")
    except ValueError as e:
        print("引发异常:",repr(e))
    

    程序运行结果为:

    输入一个数:a
    引发异常: ValueError('a 必须是数字',)
    

    内容学习:

    1. 黑马程序员
    2. http://c.biancheng.net/view/4593.html
    3. http://c.biancheng.net/view/2360.html
    展开全文
  • python异常捕获

    千次阅读 多人点赞 2022-02-28 19:30:52
    小啾的python异常捕捉,处理。捕捉一个异常,多个异常,所有异常,自定义异常,raise主动触发异常,及try...except...else...finally...关键词逻辑。
  • Python 异常捕获

    2022-02-19 23:34:23
    python异常捕获通常用 try…except…结构 把可能发生错误的语句放在 try 模块里,用 except 来处理异常,会让系统不会直接报错,而是给你具体另一种选项吧。 举个例子 首先将try注释并执行 然后我在输入...
  • python异常捕捉处理

    2020-09-26 19:14:09
    捕捉异常 python异常处理相关需求,后续待补充。 一,try…except…捕捉异常 获取异常并定位出错误的代码是哪一行,通过traceback模块可定位出错代码的行数与错误信息 import traceback import time def func():...
  • 在数据处理的时候捕捉一个JSONDecodeError 异常, 我是这么写的 try: pass except JSONDecodeError: pass 然后这样写报错勒, 然后很奇怪,然后去看了下python标准异常库,发现里边没有这个。。。 所以我...
  • 一般情况下,在Python无法正常处理程序时就会发生一个异常。 2.常见的异常类型 Exception:常规错误的基类 SyntaxError:Python 语法错误 AssertionError:断言语句失败 ImportError:导入模块/对象失败 IndexError...
  • we don't walk all the way through the frame stack in this example # see hg.python.org/cpython/file/8dffb76faacc/Lib/traceback.py#l280 # (Imagine if the 1/0, below, were replaced by a call to test() ...
  • 怎样捕获代码中的所有异常? 解决方案 想要捕获所有的异常,可以直接捕获 Exception 即可: try: ... except Exception as e: ... log('Reason:', e) # Important! 这个将会捕获除了 SystemExit 、 ...
  • Python异常处理笔记

    2020-12-29 17:21:24
    异常处理是编程语言的一种机制,用于处理软件或系统中出现的异常状况(超出程序正常执行流程的某些特殊条件)。在当前主流编程语言的错误...Python异常处理使用try,catch,else和finally关键字来尝试可能未成功的操作...
  • python捕捉到几个异常

    2020-12-10 09:36:03
    python2中,如果一个外部模块抛出了一个未继承异常的东西,那么您仍然无法捕捉异常。在 通过捕捉显式异常,您可以处理您知道可能发生的错误。如果你包揽一切,你的应用程序可能会做一些意想不到的事情,你可能会...
  • Python 异常处理

    2020-12-06 11:19:57
    一般情况下,在python无法正确处理程序时,就会发生异常;当发生异常时,我们需要捕获它并进行处理,否则程序会终止运行。看下例代码:程序的作用是,输入两个值a,b,调用division()获得a/b的值c并打印出来。程序...
  • Python异常处理机制 异常的捕获处理 tey...except...else结构 如果try块中没有抛出异常,则执行else块,如果try中抛出异常,则执行except块
  • 捕获异常 # 对数字变量使用append操作 a = 123 a.apppend(4) 执行这个程序时,会抛出: AttributeError: 'int' object has no attribute 'apppend' 我们使用try:except语句进行捕获。 # 捕获异常 a = 123 try: ...
  • 看标题觉得高大上,好像能处理所有的异常。...try:代码except exception:代码注意:except exception 会捕捉所有的异常,简称:万能异常。而我所知道的异常有: 索引异常 变量名字异常 迭代异常 无法调用异...
  • python异常相关的知识与方法看这一篇文章就够啦
  • python如何来捕获异常

    2021-01-29 04:54:42
    调试Python程序时,经常会报出一些异常异常的原因一方面可能是写程序时由于疏忽或者考虑不全造成了错误,这时就需要根据异常Traceback到出错点,进行分析改正;另一方面,有些异常是不可避免的,但我们可以对异常...
  • 异常即是一个事件,该事件会在程序执行过程中发生,会影响程序的正常执行,一般情况下,在python无法正常处理程序时就会发生一个异常异常python对象,表示一个错误。当python脚本发生异常时我们需要捕获处理它,...
  • python异常捕获和处理

    2021-06-07 10:11:27
    文章目录捕捉多种异常详细的异常信息其他语句raise手动抛出异常assert语句触发异常异常但是不想结束程序时,使用try…except捕获异常,处理异常,让程序可以继续执行。Python解析器会自动将通用异常类型名称放在...
  • Python 如何捕获异常后继续运行?

    千次阅读 2020-12-23 09:03:35
    try:1/0print(1)except ZeroDivisionError:pass如上,我想要触发...就是说有好几个语句是互相独立的,他们都有可能触发比如说ZeroDivisionError异常,那么触发了我不希望异常语句后的语句停止运行,而是继续运...
  • python异常处理 在程序中由于编码不规范,导致程序无法正常执行,此时就会报错。 异常处理机制 try: 可能出现异常的代码 except Exception as e:#Exception是父类 print(e) 出现异常执行 else: 没有出现异常...
  • python 捕获异常后继续执行

    万次阅读 2019-10-18 18:54:20
    最近写爬虫,发现获取的URL链接中总会出现一些坏数据,即访问后被拒绝,requests直接抛出异常,导致爬虫终端。于是想找方法在捕获异常后跳过异常URL继续执行程序 方法如下: while True: try: r=requests.get(url,...
  • 主要介绍了Python实现捕获异常发生的文件和具体行数。具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,710
精华内容 7,484
关键字:

python捕捉异常