首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Python 工匠: 异常处理三个好习惯

而 KeyError、 ValueError、 TypeError 等更是日常编程里随处可见老朋友。 ” 前言 异常处理工作由“捕获”和“抛出”两部分组成。...当时项目使用了 Django 框架,而 Django 错误页面正是使用了异常机制实现。...我看到了一段让我非常纠结代码:  # 在某个处理图像模块内部 # /util/image/processor.py def process_image...2.我必须引入 APIErrorCode 异常类作为依赖来捕获异常,哪怕我脚本和 Django API 根本没有任何关系。 这就是异常类抽象层级不一致导致结果。...比如,应该在贴近高层抽象(视图 View 函数)地方,将图像处理模块 ImageOpenError 低级异常包装转换为 APIErrorCode 高级异常 修改后代码:

72740

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

nowait和  skip_locked是互斥,同时设置会导致ValueError。     ...被atomic管理起来代码块还可以内嵌到方法中。这样的话,即便内部代码块正常运行,如果外部代码块抛出异常的话,它也没有办法把它修改提交到数据库中。     ...如果你试图在回滚前执行一些数据库操作,Django抛出TransactionManagementError。通常你会在一个ORM相关信号处理器抛出异常时遇到这个行为。...下面是Django事务管理代码: 进入最外层atomic代码块时开启一个事务; 进入内部atomic代码块时创建保存点; 退出内部atomic时释放或回滚事务;注意如果有嵌套,内层事务也是不会提交...如果发生了异常,Django在退出第一个父块时候执行回滚,如果存在保存点,将回滚到这个保存位置,否则就是回滚到最外层代码块。外层事务仍然能够保证原子性。

2.1K40

Python 工匠: 异常处理三个好习惯

而 KeyError、 ValueError、 TypeError 等更是日常编程里随处可见老朋友。 异常处理工作由“捕获”和“抛出”两部分组成。...当时项目使用了 Django 框架,而 Django 错误页面正是使用了异常机制实现。...异常类作为依赖来捕获异常 哪怕我脚本和 Django API 根本没有任何关系 这就是异常类抽象层级不一致导致结果。...,应该在贴近高层抽象(视图 View 函数)地方,将图像处理模块 ImageOpenError 低级异常包装转换为 APIErrorCode 高级异常 修改后代码: # <PROJECT_ROOT...最后再总结一下要点: 只捕获可能会抛出异常语句,避免含糊捕获逻辑 保持模块异常类抽象一致性,必要时对底层异常类进行包装 使用“上下文管理器”可以简化重复异常处理逻辑 看完文章你,有没有什么想吐槽

87730

Python 工匠:异常处理三个好习惯

而 KeyError、ValueError、TypeError等更是日常编程里随处可见老朋友。 异常处理工作由“捕获”和“抛出”两部分组成。...当时项目使用了 Django 框架,而 Django 错误页面正是使用了异常机制实现。...我看到了一段让我非常纠结代码: # 在某个处理图像模块内部 # /util/image/processor.py def process_image(...):...异常类作为依赖来捕获异常 哪怕我脚本和 Django API 根本没有任何关系 这就是异常类抽象层级不一致导致结果。...最后再总结一下要点: 只捕获可能会抛出异常语句,避免含糊捕获逻辑 保持模块异常类抽象一致性,必要时对底层异常类进行包装 使用“上下文管理器”可以简化重复异常处理逻辑 看完文章你,有没有什么想吐槽

58740

关于若依Python(Django-Vue-Admin)一些设置

Django-Vue-Admin 是一套全部开源快速开发平台,毫无保留给个人及企业免费使用。 前端采用ruoyi-ui 、Vue、Element UI。...1.恢复原生admin后台: 系统并没有包含原生admin后台界面,开发过程中如果要看数据在没有和前端对接情况下要看数据智能通过数据库管理工具链接数据库查看,这个就很蛋疼了。...saves a User with the given email and password. """ if not username: raise ValueError...☆文章版权声明☆ * 网站名称:obaby@mars * 网址:https://h4ck.org.cn/ * 本文标题: 《关于若依Python(Django-Vue-Admin)一些设置》...named ‘djangoDjango 代码保护 django 主动抛出 403 异常 Django APScheduler + uwsgi 定时任务重复运行

2.6K30

三个好习惯,帮你写好Python里异常处理

而 KeyError、 ValueError、 TypeError 等更是日常编程里随处可见老朋友。 异常处理工作由“捕获”和“抛出”两部分组成。...当时项目使用了 Django 框架,而 Django 错误页面正是使用了异常机制实现。...我看到了一段让我非常纠结代码: # 在某个处理图像模块内部 # /util/image/processor.py def process_image(...):...异常类作为依赖来捕获异常 哪怕我脚本和 Django API 根本没有任何关系 这就是异常类抽象层级不一致导致结果。...,应该在贴近高层抽象(视图 View 函数)地方,将图像处理模块 ImageOpenError 低级异常包装转换为 APIErrorCode 高级异常 修改后代码: # <PROJECT_ROOT

1.1K20

- Better Exceptions

本地异常的话通过pdb调试/print输出关键信息是可行,但是对于线上异常的话,只能从日志里查看,但日志里信息可能只是提示你:ValueError: need more than 3 values...但,往往很难复现,因为从日志里你看不到用户输入是什么?如果你没有手动捕获异常,并把造成异常数据写入log。...但是,对于Django和Tornado这样Web框架,没啥用。为什么呢?...大概意思就是,如果系统抛出一个未捕获异常,那么解释器就会调用sys.excepthook方法,同时传递三个参数:异常类(ValueError或者KeyError之类),异常实例,和traceback...这意味着,你可以通过重写这个方法来处理系统未捕获异常处理。但,在框架中(我只看了Django代码,测试了Tornado)会自己处理异常,所以这种hook方式不会被触发。

1.6K20

Python 工匠: 异常处理三个好习惯

而 KeyError、 ValueError、 TypeError 等更是日常编程里随处可见老朋友。异常处理工作由“捕获”和“抛出”两部分组成。...一个错误码返回大概长这个样子:图片在制定好错误码规范后,接下来任务就是如何实现它。当时项目使用了 Django 框架,而 Django 错误页面正是使用了异常机制实现。...Django API 根本没有任何关系这就是异常类抽象层级不一致导致结果。...(视图 View 函数)地方,将图像处理模块 ImageOpenError 低级异常包装转换为 APIErrorCode 高级异常修改后代码:图片除了应该避免抛出高于当前抽象级别的异常外,我们同样应该避免泄露低于当前抽象级别的异常...最后再总结一下要点:只捕获可能会抛出异常语句,避免含糊捕获逻辑保持模块异常类抽象一致性,必要时对底层异常类进行包装使用“上下文管理器”可以简化重复异常处理逻辑看完文章你,有没有什么想吐槽

67810

再谈装饰器

昨天我分享了装饰器使用方法,发现看的人并不多,这也正常,毕竟装饰器是一种锦上添花东西,没有它,无法稍微麻烦点,但还是可以凑合着过。...学以致用,对于我们从事 IT 职业,学习东西更要使用才行,如果工作上没有需求,那么就自己创造需求,自己来实现,只有这样,才能真正学会。...假如让你写个装饰器,当被装饰函数调用抛出指定异常时,函数会被重新调用,直到达到指定最大调用次数才重新抛出指定异常,你怎么写呢?...=CustomException) def func(num): 就表示当 func 抛出 ValueError 时自动重试 3 次,如果最后抛出是 CustomException 就抛出异常,否则就什么也不抛出...__main__.ValueError 当你实现这个装饰器后,可以保存下来,后续项目中肯定可以用得到,到时候就不用再造轮子了。

37830

15.Django基础十一之认证系统

设置Proxy模型: 作用: 给模型增加操作方法 局限: 不能增加或减少User模型字段 好处: 不破坏原来User模型表结构 如果你对Django提供字段,以及验证方法都比较满意,没有什么需要改...并且还写了一个接受保存模型信号处理方法,只要是User调用了save方法,那么就会创建一个UserExtension和User进行绑定。...若用户没有登录,则会跳转到django默认 登录URL '/accounts/login/ ' (这个值可以在settings文件中通过LOGIN_URL进行修改)。...若用户没有登录,则会跳转到django默认 登录URL '/accounts/login/ ' 并传递当前访问url绝对路径 (登陆成功后,会重定向到该路径)。     ...,之前我们保存到了session表中,现在也是保存到里面,但是通过一个auth模块login方法就搞定了,然后重定向到首页index auth.login(request,user_obj

2.1K20

几个小例子给你讲解Python中类描述符

我可以大胆地猜测,你对于描述符了解是始于诸如 Django ORM 和 SQLAlchemy 中字段对象,是的,它们都是描述符。你认识,可能也止步于此,如果你没有去深究,它为何要如此设计?...假想你正在给学校写一个成绩管理系统,并没有太多编码经验你,可能会这样子写。..._chinese = value else: raise ValueError("Valid value must be in [0, 100]") @...功能上,没有问题,但就是太啰嗦了,三个变量合法性逻辑都是一样,只要大于0,小于100 就可以,代码重复率太高了,这里三个成绩还好,但假设还有地理、生物、历史、化学等十几门成绩呢,你得写多少行重复且没有意义代码...它返回属性值,若属性不存在、不合法等都可以抛出对应异常。 __set__:将在属性分配操作中调用。不会返回任何内容。 __delete__:控制删除操作。不会返回内容。

76020

捕获异常然后再抛出另一个异常正确姿势

raise ValueError(e) 不知道大家有没有注意到这样抛出异常方式有一个很严重问题,那就是 在重新抛出另一个异常时候,捕获上一个异常 traceback 信息丢失了(python2...(e) ValueError: integer division or modulo by zero 这样的话非常不利于查找问题: 比如上面的例子中实际出错代码是第二行,但是 当我们捕获了第一个异常然后再抛出一个自定义异常时候...Python 2 那么在 Python 2 下如果我们不想丢失捕获异常 traceback 信息的话,应该 怎样重新抛出异常呢?.../异常类 value: 初始化异常类参数值/异常类实例(使用这个实例作为 raise 异常实例)/元组/None traceback: traceback 对象/None 下面我们来看看上面的方法是否可以应对多层异常捕获然后再抛出情况...Python 3 在 Python 3 下默认会附加上捕获上个异常 trackback 信息(保存在异常实例 __traceback__ 属性中): : $ cat a.py def div():

1.2K20

django URL (路由系统)

URL配置(URLconf)就像Django 所支撑网站目录。...它本质是URL模式以及要为该URL模式调用视图函数之间映射表;你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码。...对于捕获没有路径转换器,那么它会匹配除了斜杠"/"外所有字符作为捕获值。     3.url不需要以斜杠开头。...默认Path converter Django2.0自带PathConveter包括:     str:匹配除了路径分隔符(/)之外非空字符串,如果没有转换器,默认使用str作为转换器。    ...如果它不能转换给定值,它应该抛出ValueError。     to_url(self, value) 方法,和 to_python 相反,它会将Python类型转换为在URL中使用字符串。

1.5K30

Django实践-04静态资源和Ajax请求

: 参考: Django测试开发-20-settings.py中templates配置,使得APP下模板以及根目录下模板均可生效 解决django 多个APP时 static文件问题 django...配置app中静态文件步骤 Django多APP加载静态文件 django.short包参考:https://docs.djangoproject.com/en/4.1/topics/http/shortcuts.../ Django实践-04静态资源配置 创建静态资源目录 在djangoproject项目中,我们将静态资源置于名为static文件夹中,在该文件夹包含了三个子文件夹:css、js和images,分别用来保存外部...修改settings.py文件 为了能够找到保存静态资源文件夹,我们还需要修改Django项目的配置文件settings.py,如下所示: STATIC_URL = 'static/' # 指定静态文件存放路径...teacher.bad_count teacher.save() data = {'code': 20000, 'mesg': '操作成功', 'count': count} except (ValueError

15210
领券