使用相同异常类作为参数的“ except”语句两次

2024-04-13

在Python中,我该如何使用except具有相同异常名称的块两次try/except语句,无需将代码包装到另一个语句中try/except block?

简单的例子(这里each呼叫pages.get可能会引发异常):

try:
    page = pages.get(lang=lang)
except Page.DoesNotExist:
    if not lang == default_lang:
        page = pages.get(lang=default_lang)
    else:
        raise Page.DoesNotExist
except Page.DoesNotExist:
    page = pages[0]

现在,在我的 Django 应用程序中,我确实像这样处理(但我不想要“额外”try块在这里):

try:
    try:
        page = pages.get(lang=lang)
    except Page.DoesNotExist:
        if not lang == default_lang:
            page = pages.get(lang=default_lang)
        else:
            raise Page.DoesNotExist
except Page.DoesNotExist:
    page = pages[0]

任何比上面更好的处理代码都值得赞赏! :)

Thanks.


你也不能这样做并期望elif执行:

if foo == bar:
  # do "if"
elif foo == bar:
  # do "elif"

确实没有理由这样做。对你来说也一样except忧虑。

这是第一个代码片段的反汇编 Python 字节码:

 13           0 SETUP_EXCEPT            10 (to 13)

 14           3 LOAD_GLOBAL              0 (NameError)
              6 RAISE_VARARGS            1
              9 POP_BLOCK           
             10 JUMP_FORWARD            44 (to 57)

 15     >>   13 DUP_TOP             
             14 LOAD_GLOBAL              0 (NameError)
             17 COMPARE_OP              10 (exception match)
             20 POP_JUMP_IF_FALSE       35
             23 POP_TOP             
             24 POP_TOP             
             25 POP_TOP             

 16          26 LOAD_GLOBAL              0 (NameError)
             29 RAISE_VARARGS            1
             32 JUMP_FORWARD            22 (to 57)

 17     >>   35 DUP_TOP             
             36 LOAD_GLOBAL              0 (NameError)
             39 COMPARE_OP              10 (exception match)
             42 POP_JUMP_IF_FALSE       56
             45 POP_TOP             
             46 POP_TOP             
             47 POP_TOP             

 18          48 LOAD_CONST               1 (1)
             51 PRINT_ITEM          
             52 PRINT_NEWLINE       
             53 JUMP_FORWARD             1 (to 57)
        >>   56 END_FINALLY         
        >>   57 LOAD_CONST               0 (None)
             60 RETURN_VALUE        

很明显,第一个COMPARE_OP to NameError(在偏移量 17 处)将捕获异常并跳转到第二次此类比较之后(在偏移量 36 处)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用相同异常类作为参数的“ except”语句两次 的相关文章

  • Google App Engine queue.yaml 无法在开发服务器中工作

    我无法让 dev appserver py 识别我使用queue yaml 创建的自定义队列 他们没有出现在http localhost 8000 taskqueue http localhost 8000 taskqueue 当我尝试向其
  • scipy 将一个稀疏矩阵的所有行附加到另一个稀疏矩阵

    我有一个 numpy 矩阵 想在其中附加另一个矩阵 这两个矩阵的形状为 m1 shape 2777 5902 m2 shape 695 5902 我想将 m2 附加到 m1 以便新矩阵的形状为 m new shape 3472 5902 当
  • C# using 语句是否执行 try/finally ?

    假设我有以下代码 private void UpdateDB QuoteDataSet dataSet Strint tableName using SQLiteConnection conn new SQLiteConnection co
  • opencv水印周围的轮廓

    我想在图像中的水印周围画一个框 我已经提取了水印并找到了轮廓 但是 不会在水印周围绘制轮廓 轮廓是在我的整个图像上绘制的 请帮我提供正确的代码 轮廓坐标的输出为 array 0 0 0 634 450 634 450 0 dtype int
  • 如何在Python中同时运行两只乌龟?

    我试图让两只乌龟一起移动 而不是一只接着另一只移动 例如 a turtle Turtle b turtle Turtle a forward 100 b forward 100 但这只能让他们一前一后地移动 有没有办法让它们同时移动 有没有
  • Python 中的流式传输管道

    我正在尝试使用 Python 将 vmstat 的输出转换为 CSV 文件 因此我使用类似的方法转换为 CSV 并将日期和时间添加为列 vmstat 5 python myscript py gt gt vmstat log 我遇到的问题是
  • 如何在 Python 中加密并在 Java 中解密?

    我正在尝试在 Python 程序中加密一些数据并将其保存 然后在 Java 程序中解密该数据 在Python中 我像这样加密它 from Crypto Cipher import AES KEY 1234567890123456789012
  • Keras:如何保存模型或权重?

    如果这个问题看起来很简单 我很抱歉 但是阅读 Keras 保存和恢复帮助页面 https www tensorflow org beta tutorials keras save and restore models https www t
  • 异常堆栈跟踪不显示抛出异常的位置

    通常 当我抛出异常 捕获它并打印出堆栈跟踪时 我会看到抛出异常的调用 导致该异常的调用 导致该异常的调用that 依此类推回到整个程序的根 现在它只向我显示异常所在的调用caught 而不是它所在的地方thrown 我不明白是什么改变导致了
  • Emacs 24.x 上的 IPython 支持

    我对 IPython 与 Emacs 的集成感到困惑 从 Emacs 24 开始 Emacs 附带了自己的python el 该文件是否支持 IPython 还是仅支持 Python 另外 维基百科 http emacswiki org e
  • 结构差异 sudo() run('sudo 命令')

    我想知道函数之间有什么区别sudo 和函数run sudo u user smth 文档上有 sudo 在所有运行方式上都是相同的 除了它总是换行 调用 sudo 程序中的给定命令以提供超级用户 特权 但有几次 sudo cmd 提示我输入
  • 从扫描文档中提取行表 opencv python

    我想从扫描的表中提取信息并将其存储为 csv 现在我的表提取算法执行以下步骤 应用倾斜校正 应用高斯滤波器进行去噪 使用 Otsu 阈值进行二值化 进行形态学开局 Canny 边缘检测 进行霍夫变换以获得表格行 去除重复行 10像素范围内相
  • Django 的 request.FILES 出现 UnicodeDecodeError

    我在视图调用中有以下代码 def view request body u for filename f in request FILES items body body Filename filename n f read n 在某些情况下
  • pytest:同一接口的不同实现的可重用测试

    想象一下我已经实现了一个名为的实用程序 可能是一个类 Bar在一个模块中foo 并为其编写了以下测试 测试 foo py from foo import Bar as Implementation from pytest import ma
  • 使用 Keras np_utils.to_categorical 的问题

    我正在尝试将整数的 one hot 向量数组制作为 keras 将能够使用的 one hot 向量数组来拟合我的模型 这是代码的相关部分 Y train np hstack np asarray dataframe output vecto
  • Python:IndexError:修改代码后列表索引超出范围

    我的代码应该提供以下格式的输出 我尝试修改代码 但我破坏了它 import pandas as pd from bs4 import BeautifulSoup as bs from selenium import webdriver im
  • Mac OSX 10.6 上的 Python mysqldb 不工作

    我正在使用 Python 2 7 并尝试让 Django 项目在 MySQL 后端运行 我已经下载了 mysqldb 并按照此处的指南进行操作 http cd34 com blog programming python mysql pyth
  • 在系统托盘中隐藏 tkinter 窗口 [重复]

    这个问题在这里已经有答案了 我正在制作一个程序来提醒我朋友的生日 这样我就不会忘记祝福他们 为此 我制作了两个 tkinter 窗口 1 First one is for entering name and birth date 2 Sec
  • 将上下文管理器的动态可迭代链接到单个 with 语句

    我有一堆想要链接的上下文管理器 第一眼看上去 contextlib nested看起来是一个合适的解决方案 但是 此方法在文档中被标记为已弃用 该文档还指出最新的with声明直接允许这样做 自 2 7 版起已弃用 with 语句现在支持此
  • Apache Beam Pipeline 写表后查询表

    我有一个 Apache Beam Dataflow 管道 它将结果写入 BigQuery 表 然后我想查询该表以获取管道的单独部分 但是 我似乎无法弄清楚如何正确设置此管道依赖性 我编写的新表 然后想要查询 与一个单独的表连接以进行某些过滤

随机推荐

  • 使用 BCEL 生成的解析字节码确定对象之间的传出耦合(CBO 指标)

    我已经构建了一个程序 它接受提供的 class 文件并使用 BCEL 解析它 我现在已经学会了如何计算 LCOM4 值 现在我想知道如何计算类文件的CBO 对象之间的耦合 值 我已经搜索了整个网络 试图找到关于它的正确教程 但到目前为止我还
  • Gracefull python joblib 杀死

    是否有可能优雅地杀死一个joblib https github com joblib joblib处理 线程后端 并且仍然返回到目前为止的计算结果 parallel Parallel n jobs 4 backend threading r
  • Facebook 对话框、注销和访问令牌(Facebook iOS SDK)

    当使用这样的代码创建 Facebook 对话框时 NSMutableDictionary params NSMutableDictionary dictionaryWithObjectsAndKeys apiKey api key nil
  • Apple Mac 和 Unix 时间戳

    我知道Apple系统上的主要时间戳是CF绝对时间值 也称为Mac绝对时间 它是根据自01 01 2001 00 00 00 UTC以来的秒数计算的32位整数 例如 219216022 解码后为 Thu 13 December 2007 05
  • 在 Objective C 中格式化浮点数

    我需要将浮点数 吸引人的标题 他 格式化为小数点后两位 但前提是这些小数位的值不为零 例子 我有一个名为 answer 的 NSTextField 在使用几个浮点进行一些数学运算后 我想将 answerFloat 变量分配给 answer
  • 无法正确设置PrintArea

    我正在使用 phpspreadsheet v1 3 1 我正在构建一个 Excel 文件 下载 一切正常 唯一的问题是定义 setPrintArea 它总是将标准 PrintArea 返回到 excel 中 基本上 我构建了 Excel 行
  • 根据特定参数值显示或隐藏 SSRS 列

    我无法根据所选参数值显示 隐藏列 我的报告是如何设置的 参数 ImportStatus ImportStatus 参数有三个值可供选择 M V E 如果我选择 ImportStatus value M 那么我希望报告显示特定列 目前 如果我
  • 如何通过扬声器而不是较弱的耳机扬声器播放音频?

    我正在学习核心音频 由于某种原因 处理图的声音仅通过弱 耳机 播放 当您将设备放在耳边时 而不是通过 iPhone 的常规扬声器播放 这是设置音频会话的代码 但我看不到它在哪里配置音频路由 void setupAudioSession AV
  • PivotTable.js 有条件地更改文本颜色

    所以我正在使用 PivotTable js 它对工作有很大帮助 但现在 我正在尝试获取一个过滤器来根据值更改单元格的颜色或单元格内的字体 例如 如果我的数据集中有一个日期数组 dates N A 4 12 2016 7 9 2024 7 9
  • Python 类输入参数

    我是面向对象编程的新手 我的想法是实现以下课程 class name object name def init self name print name 然后的想法是创建该类的两个实例 person1 name jean person2 n
  • JSF 国际化 f:loadbundle 或通过 faces-config:性能点

    有两种方法可以将属性文件加载到 JSF 2 0 中 全球资源包 全局加载属性文件 以便所有jsf页面都可以访问消息 您可以创建一个 faces config xml 文件并显式声明属性文件 面孔配置 xml
  • 使用java进行HTML解析[重复]

    这个问题在这里已经有答案了 可能的重复 可以解析 HTML 文档并构建 DOM 树 java https stackoverflow com questions 1433250 possible to parse a html docume
  • BufferedImage.getGraphics().drawImage() 改变像素值

    这是一个后续previous https stackoverflow com questions 23707736 strange bufferedimage behaviour with 4bits palette问题 标准推荐的改造方式
  • 基本 Flask:添加有用的功能

    我编写了一个在终端中运行的 python 脚本 并使用 Flask 将其移植到网络上 我已经完成了教程的部分内容 具体来说 http blog miguelgrinberg com post the flask mega tutorial
  • 更改 C# 中多行文本框的特定行

    我无法更改多行文本框的特定字符串 假设多行文本框的第一行是 Hello 第二行是 Bye 但是当我尝试更改第二行的值时 如下所示 textBox1 Lines 1 Good bye 当我使用调试模式看到结果时 它不是 再见 我也读过这个MS
  • 使用 React hooks 对数组进行排序

    我正在使用反应钩子对数组进行简单排序 但它不更新状态 谁能指出我要去这里做什么 import React useState from react import ReactDOM from react dom import styles cs
  • 如何在 Java 中使用 Jython Standalone 安装 Python 库?

    我正在尝试使用 Java 中的 Jython Standalone jar 安装 Python 库 我的代码似乎将 PIP 7 1 2 安装在独立 jar 旁边的文件夹中 但是一旦我尝试使用 PIP 进行自身升级 它就会失败并出现 ZipI
  • 本地放置文件的 jQuery .load() 的跨源问题

    我面临着一个非常基本的 jQuery 编码的恼人的跨源问题 我正在尝试调用 加载本地放置的test 1 html我的主 javascript 文件中的文件 load container load test 1 html function d
  • git add 错误:“致命:malloc,内存不足”

    当我尝试执行 git add 时 出现错误 致命 malloc 内存不足 我想系统显然已经耗尽了内存 但是有没有办法解决这个问题 我还运行 Windows Server 2003 并使用 msysGit 编辑 经过更多搜索后 我认为这是 g
  • 使用相同异常类作为参数的“ except”语句两次

    在Python中 我该如何使用except具有相同异常名称的块两次try except语句 无需将代码包装到另一个语句中try except block 简单的例子 这里each呼叫pages get可能会引发异常 try page pag