首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

08.Django基础六之ORM中的锁和事务

文档中说,不推荐这么做。...需要注意的是,在调用handle_exception()之前,generate_relationships()中的修改就已经被安全的回滚了。因此,如果有需要,你照样可以在异常处理函数中操作数据库。...尽量不要在atomic代码块中捕获异常 因为当atomic块中的代码执行完的时候,Django会根据代码正常运行来执行相应的提交或者回滚操作。...担心主要集中在DatabaseError和它的子类(如IntegrityError)。如果这种异常真的发生了,事务就会被破坏掉,而Django会在代码运行完后执行回滚操作。...如果发生了异常,Django在退出第一个父块的时候执行回滚,如果存在保存点,将回滚到这个保存点的位置,否则就是回滚到最外层的代码块。外层事务仍然能够保证原子性。

2.2K40

Django model 层之事务管理总结

def viewfunc(request): # 函数中的代码将放在同一个事务中,一起执行 do_stuff() 用法2:把atomic当上下文管理器使用 from django.db...(): # 以下代码(with作用范围内的),将放在同一个事务中,一起执行 do_more_stuff() 可以把atomic封装在一个try/except语句块内 from django.db...do_stuff() except Exception as e: handle_exception() add_children() 说明: 如果try:...except 语句块发生异常...特别要注意,不要在with transaction.atomic():作用范围内捕获异常,否则会有意想不到的后果,因为Django是根据未捕获的数据库异常来判断并执行回滚的 处于性能考虑,尽量保证事务尽可能的小...,特别是在atomic()内放置处理需要耗时较长的程序代码。

72130
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    由一道 Java finally 执行顺序的题引发的思考

    别激动,别激动,不卖关子了,我直接说了: 先说基本数据类型,由于基本数据类型是 值传递 ,所以在 try 里的 return 执行的时候,就先将变量的值隐性的作为最终返回的值。...这里多说一句,其实 Java 里都是值传递,只不过基本数据类型的值是真正的值,而引用数据类型是地址值而已。(如果你看这句话更晕的话,就先跳过去这句话,反正本篇文章也不是为了解释这个的。)...在 try 里没有发生异常的情况下,是 try 里的 return 会执行,但发生了异常,则反之。 ---- 问:如果 catch 中有 return 语句呢?...当发生异常后,catch 中的 return 执行情况与未发生异常时 try 中 return 的执行情况完全一样。...---- 最终总结 finally 块的语句在 try 或 catch 中的 return 语句执行之后返回之前执行,且 finally 里的修改语句可能影响也可能不影响 try 或 catch 中 return

    56340

    编程体系结构(02):Java异常体系

    一、异常简介 优秀的程序代码,都在追求高效,安全,和低错误率,但是程序中的异常是无法避免的,降低异常出现的频率是关键,异常出现如何处理是另一个重要方面,Java体系中异常框架对于系统开发是十分重要的。...1、抛出异常 即异常在当前流程下不处理,一种是直接通过方法传递给调用者,throws关键字是用于在方法声明上声明抛出异常类型的,并且一次可以声明抛出多种类型的异常。...需要特别说明的一点,在Spring框架中,事务触发多数是以是否抛出异常为标识来处理的,如果方法在事务控制内,方法内异常捕获但是最终没有抛出,那该事务则无效。...2、捕获异常 通常捕获异常会使用try-catch-finally关键字三连操作: Try尝试捕获异常: 如果语句依次执行结束,则跳过catch,在存在finally代码块时,则执行否则执行后续流程;...4、熔断降级 在微服务架构系统下,某个服务故障或者异常,触发熔断该服务,避免引发整个微服务链路异常,防止整个系统服务的雪崩。以此缓解服务器资源的的压力,以保证核心业务的正常运行。

    63110

    Java Review(三十二、异常处理)

    catch 子句中说明的异常类, 那么: 程序将跳过 try语句块的其余代码。...程序将执行 catch 子句中的处理器代码。 如果在 try 语句块中的代码没有拋出任何异常,那么程序将跳过 catch 子句。...此时,将跳过 try语句块中的剩余代码,转去执行与该异常匹配的 catch 子句中的代码, 最后执行 finally 子句中的代码。...在这种情况下,程序将执行 try 语句块中的所有语句,直到有异常被抛出为止。此时, 将跳过 try 语句块中的剩余代码, 然后执行 finally 子句中的语句, 并将异常抛给这个方法的调用者。...因此,有必要将整个任务包装在一个 try语句块中,这样, 当任何一个操作出现问题时, 整个任务都可以取消。

    78810

    一文搞懂Python错误和异常

    结合上面的示例,处理异常的规则是:把执行的语句放在 try 代码块中,将错误处理器代码放置在 except 代码块中,except会引发ZeroDivisionError异常来提醒Coder,这段代码的错误是零不能作为被除数...) 如果没有异常发生,则跳过 except 子句 并完成 try 语句的执行 如果在执行try 子句时发生了异常,则跳过该子句中剩下的部分。...然后,如果异常的类型和 except 关键字后面的异常匹配,则执行 except 子句 ,然后继续执行 try 语句之后的代码 如果发生的异常和 except 子句中指定的异常不匹配,则将其传递到外部的...综上,对于多个except子句,可以总结为: 一个 try 语句可能有多个 except 子句,以指定不同异常的处理程序 最多会执行一个处理程序 处理程序只处理相应的 try 子句中发生的异常,而不处理同一...表达式open('poem.txt')返回是一个_io.TextIOWrapper 类型的变量赋给f。 在with语句块中就可以使用这个变量操作文件。

    1K10

    学会Java异常处理,让你的程序健壮无比!有两下子!

    try-catch语句块  try-catch语句块用于捕获和处理异常情况。其中,try块中包含可能抛出异常的语句,而catch块用于捕获和处理异常。...是指异常类型,如果try块中的代码抛出了该异常类型,则会跳转到catch块中执行,并传递异常对象e作为参数。  ...下面是对您提供的代码片段的解释:try块:包含可能会抛出异常的代码。如果代码执行过程中没有异常发生,那么所有catch块将被跳过。catch块:可以有多个,每个catch块对应一种异常类型。...如果try块中的代码执行过程中没有异常发生,那么catch块将被跳过,程序继续执行finally块(如果有的话)。...我们学习了Java异常处理的基本语法,包括try-catch和finally块的使用。try块用于包围那些可能会抛出异常的代码,而catch块则用来捕获并处理这些异常。

    27921

    关于try catch finally的一些小细则

    细则: 1.try块是必须的,catch块和finally块都是可选的,但必须存在一个或都存在。try块不能单独存在。...2.try块里的语句运行中出现异常会跳过try块里其他语句,直接运行catch里的语句。 3.无论try块中是否有异常,无论catch块中的语句是否实现,都会执行finally块里的语句。...4.如果try块或catch块中有return语句,finally块里的语句会执行在try块或catch块中的return语句前。...5.如果finally块里有return语句,则直接返回,而不执行try块或catch块里的return语句。...6.只有一种办法不执行finally块里的语句,那就是调用System.exit(1);方法,即退出java虚拟机。 强调:finally块里的语句在try或catch里的人return前执行!!!

    48120

    Django之Ajax文件上传

    当Django处理上传一个文件的时候,文件数据被放在request.FILES中。这个文档解释文件怎么样被存储在磁盘上或者内存中,怎样定制默认的行为。...raw_data是已经上传的字节流 start是raw_data块开始的位置 你返回的数据将被传递到下一个处理句柄的receive_data_chunk方法中。...如果你触发一个StopUpload或者SkipFile异常,上传将被放弃或者文件被完全跳过。...文件上传的时候,如果一个上传的文件小于2.5兆,Django会将上传的东西放在内存里,如果上传的文件大于2.5M,Django将整个上传的文件写到一个临时的文件中,这个文件在临时文件路径中。...三个设置改变Django的上传处理行为: FILE_UPLOAD_MAX_MEMORY_SIZE:以bytes为单位的到内存中的最大大小,。比这个值大的文件将被先存到磁盘上。

    2.2K10

    Python学习笔记总结(四):异常处理

    except分句定义try代码块内引发的异常处理器,而else分句(如果有)则是提供没有发生异常时候要执行的处理器。...else 没有异常才执行、 也就是说except分句会捕捉try代码块执行时所有发生的任何异常,而else分句只在try代码执行没有发生异常时才执行,finally分句无法释放发生异常都执行。...3、try/else分句 不要将else中的代码放入try:中。保证except处理器只会因为包装在try中代码真正的失败而执行,而不是为else中的情况行为失败而执行。...然后整个try语句后继续执行下去。 如果try代码块运行时有发生异常,Python依然会回来运行finally代码块,但是接着会把异常向上传递到较高的try语句或顶层的默认处理器。...第二种形式随着异常传递额外的数据项,在raise语句中,数据是列在异常名称的后面的;在try语句中,取得该数据是通过引入一个进行接收 它的变量实现的。

    68610

    C# try catch finally

    前言  catch 和 finally 一起使用的常见方式是:在 try 块中获取并使用资源,在 catch 块中处理异常情况,并在 finally 块中释放资源。...} 这样,如果try语句块中抛出的异常是InvalidOperationException,将转入该处执行,其他异常不处理。   ...无论有没有发生异常,它总会在这个异常处理结构的最后运行。即使你在try块内用return返回了,在返回前,finally总是要执行,这以便让你有机会能够在异常处理最后做一些清理工作。...如果你不希望在这里处理异常,而当异常发生时提交到上层处理,但在这个地方无论发生异常,都要必须要执行一些操作,就可以使用try finally, 很典型的应用就是进行数据库操作: 用下面这个原语来说明:...本地代码中栈的用处非常大,不但可以用来临时保存寄存器的值,还用来保存局部变量,此外还用来保存部分或全部传给函数的参数,而函数的返回值一般是通过EAX寄存器来传递的,而不是用栈。

    1.8K20

    程序结构与控制流

    代码块中的语句,并寻找可匹配该异常的except子句。...执行完except子句后,控制权就会传递给出现在try-except代码块之后的第一条语句。try-except语句可以嵌套使用。如果异常传递到程序的最顶级却仍未被捕获,解释器就会终止程序运行。...如果try代码块中的代码没有引发异常,就会执行else子句中的代码,例如: try: f = open('foo', 'r') except IOError as e: # 处理I/O异常...如果没有引发异常,finally子句中的代码将在try代码块中的代码执行完毕后立即执行。如果引发了异常,控制权首先传递给finally子句的第一条语句。...在第二小段代码中,当控制流进入with语句后面的代码块时自动请求一个锁定,而在控制流离开时又自动释放了这个锁定。

    81320

    深入理解java异常处理机制

    4. try、catch、finally语句块的执行顺序: 1)当try没有捕获到异常时:try语句块中的语句逐一被执行,程序将跳过catch语句块,执行finally语句块和其后的语句; 2)当try...语句块后的语句不会被执行; 3)当try捕获到异常,catch语句块里有处理此异常的情况:在try语句块中是按照顺序来执行的,当执行到某一条语句出现异常时,程序将跳到catch语句块,并与catch语句块逐一匹配...,找到与之对应的处理程序,其他的catch语句块将不会被执行,而try语句块中,出现异常之后的语句也不会被执行,catch语句块执行完后,执行finally语句块里的语句,最后执行finally语句块后的语句...程序会在throw语句后立即终止,它后面的语句执行不到,然后在包含它的所有try块中(可能在上层调用函数中)从里向外寻找含有与其匹配的catch子句的try块。...4.4 Throwable类中的常用方法 注意:catch关键字后面括号中的Exception类型的参数e。Exception就是try代码块传递给catch代码块的变量类型,e就是变量名。

    94540

    Python学习笔记整理(十七)异常处理

    assert: 有条件地在程序代码中触发异常。 with/as 在Python2.6和后续版本中实现环境管理器。 用户定义的异常要写成类的实例,而不是字符串、。...*如果异常发生在try代码块内,没有符合的except分句,异常就会向上传递到程序的之前进入try中,或者到这个进程的顶层(使用Python终止这个程序并打印默认的错误消息) *如果try首行底下执行的语句没有发生异常...也就是说except分句会捕捉try代码块执行时所有发生的任何异常,而else分句只在try代码执行没有发生异常时才执行,finally分句无法释放发生异常都执行。...4、try/finally分句 python先运行try: 下的代码块: 如果try代码块运行时没有异常发生,Python会跳至finally代码块。然后整个try语句后继续执行下去。...1)异常不总是错误 在Python中,所有的错误都是异常。

    1.2K10

    深入理解java异常处理机制

    4. try、catch、finally语句块的执行顺序: 1)当try没有捕获到异常时:try语句块中的语句逐一被执行,程序将跳过catch语句块,执行finally语句块和其后的语句; 2)当try...语句块后的语句不会被执行; 3)当try捕获到异常,catch语句块里有处理此异常的情况:在try语句块中是按照顺序来执行的,当执行到某一条语句出现异常时,程序将跳到catch语句块,并与catch语句块逐一匹配...,找到与之对应的处理程序,其他的catch语句块将不会被执行,而try语句块中,出现异常之后的语句也不会被执行,catch语句块执行完后,执行finally语句块里的语句,最后执行finally语句块后的语句...程序会在throw语句后立即终止,它后面的语句执行不到,然后在包含它的所有try块中(可能在上层调用函数中)从里向外寻找含有与其匹配的catch子句的try块。...4.4 Throwable类中的常用方法 注意:catch关键字后面括号中的Exception类型的参数e。Exception就是try代码块传递给catch代码块的变量类型,e就是变量名。

    68320

    Java程序设计(高级及专题)- 异常机制「建议收藏」

    所以一般都是捕获异常或者再往上抛。 捕获异常(try-catch) 当抛出一个异常时,可以在try-catch块中捕获它并进行处理。...若是出现异常,try块中剩余语句不再执行。开始逐步检查catch块,判断catch块的异常类实例是否是捕获的异常类型。匹配后执行相应的catch块中的代码。...try-catch-finally的执行流程 try块中引起异常,异常代码之后的语句不再执行,若被catch块捕获,执行匹配的catch块,然后执行finally语句。...若catch块不能捕获异常,则执行finally语句,之后将异常传递给这个方法的调用者。...a:1 try-finally的执行流程 try块中引起异常,异常代码之后的语句不再执行,直接执行finally语句。 try块没有引发异常,则执行完try块就执行finally语句。

    55120

    js处理异常try{}catch(e){}

    如果运行中发生了错误,控制就会转移到位于catch块中语句,其中括号中的error参数被作为例外变量传递。否则,catch块的语句被跳过不执行。...,当我们输入非法的信息"abc"后,就引发了一个例外,所以剩下的try块中的语句将被跳过而开始执行catch块语句。...try…catch这种结构最常见,它的执行过程是:当没有例外发生执行完毕try块语句后或者发生例外执行完catch块语句后,控制将转移到整个try…catch结构后面的语句。...Throw的语法如下: throw errObj   errObj必须是一个Error对象或者Error的子类型。在try块代码中触发一个例外后,控制将直接转入catch块。   ...,比如有利于自定义错误类型,快速转入catch块执行,以及下面要介绍的在嵌套例外中将错误传递到外层。

    3.1K50

    Python异常处理详解

    上面的整个过程是这样的:第7行出错,它是因为第5行的代码引起的,而第5行之所以错是第2行的源代码引起的。 所以,从最底部可以看到最终是因为什么而抛出异常,从最顶部可以看到是执行到哪一句出错。...raise from # 将的异常附加在上 其中第二种形式,raise会根据给定类不传递任何参数地自动构建一个异常对象,并触发这个异常对象。...except捕获后,就表示这个异常已经处理过了,程序会跳转到finally或整个try块的尾部继续执行下去。...无论是哪种嵌套模式,异常都只在最近(或者说是最内层)的代码块中被处理,但是finally块是所有try都会执行的。...前面说过,在构造异常类的时候可以传递参数,它们会放进异常实例对象的args属性中: try: raise IndexError("something wrong") except Exception

    1.6K20
    领券