Python 中的嵌套 try/ except

2024-01-25

try:
  commands
  try:
    commands
    try:
      commands
      try:
        commands
      except:
        commands
        return to final commands
    except:
      commands
      return to final commands
  except:
    commands
    return to final commands
except:
  commands

final commands

我应该写哪条指令来代替return to final commands使任何except返回到外部 try 之后的顶级指令?这是一个可以接受的结构吗?

编辑:这是一个玩具示例(我知道我可以使用ifs,这只是一个例子;假设你必须使用它来编写它try/except).

# calculate arcsin(log(sqrt(x)-4))
x = choose one yourself
try
  x1=sqrt(x)
  return to final message
  try
    x1=log(x1-4)
    return to final message
    try
      x2=arcsin(x1)
      return to final message
    except
      message="Impossible to calculate arcsin: maybe an argument outside [-1,+1]?"
  except
    message="Impossible to calculate logarithm: maybe a not positive argument?"
except
  message="impossible to calculate square root: maybe a negative argument?" 
final message:
print message

至少,您应该能够通过重新引发异常以避免块的其余部分来将此结构减少到仅 2 个嵌套级别:

# calculate arcsin(log(sqrt(x)-4))
x = ?
message = None
try:
    try:
        x1 = sqrt(x)
    except Exception:
        message = "can't take sqrt"
        raise
    try:
         x1 = log(x1-4)
    except Exception:
        message = "can't compute log"
        raise
    try:
        x2 = arcsin(x1)
    except Exception:
        message = "Can't calculate arcsin"
        raise
except Exception:
    print message

实际上,这不是正确的方法,至少在这个例子中是这样。问题是您正在尝试使用返回错误代码等异常。您应该做的是将错误消息放入异常中。另外,通常外部 try/ except 将位于更高级别的函数中:

def func():
    try:
        y = calculate_asin_log_sqrt(x)
        # stuff that depends on y goes here
    except MyError as e:
        print e.message
    # Stuff that happens whether or not the calculation fails goes here

def calculate_asin_log_sqrt(x):
    try:
        x1 = sqrt(x)
    except Exception:
        raise MyError("Can't calculate sqrt")
    try:
        x1 = log(x1-4)
    except Exception:
        raise MyError("Can't calculate log")
    try:
        x2 = arcsin(x1)
    except Exception:
        raise MyError("Can't calculate arcsin") 
    return x2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 中的嵌套 try/ except 的相关文章

  • 将 Matplotlib 误差线放置在不位于条形中心的位置

    我正在 Matplotlib 中生成带有错误栏的堆积条形图 不幸的是 某些层相对较小且数据多样 因此多个层的错误条可能重叠 从而使它们难以或无法读取 Example 有没有办法设置每个误差条的位置 即沿 x 轴移动它 以便重叠的线显示在彼此
  • OpenCV Python cv2.mixChannels()

    我试图将其从 C 转换为 Python 但它给出了不同的色调结果 In C Transform it to HSV cvtColor src hsv CV BGR2HSV Use only the Hue value hue create
  • 为 Anaconda Python 安装 psycopg2

    我有 Anaconda Python 3 4 但是每当我运行旧代码时 我都会通过输入 source activate python2 切换到 Anaconda Python 2 7 我的问题是我为 Anaconda Python 3 4 安
  • 使用带有关键字参数的 map() 函数

    这是我尝试使用的循环map功能于 volume ids 1 2 3 4 5 ip 172 12 13 122 for volume id in volume ids my function volume id ip ip 我有办法做到这一点
  • Django:按钮链接

    我是一名 Django 新手用户 尝试创建一个按钮 单击该按钮会链接到我网站中的另一个页面 我尝试了一些不同的例子 但似乎没有一个对我有用 举个例子 为什么这不起作用
  • Flask 会话变量

    我正在用 Flask 编写一个小型网络应用程序 当两个用户 在同一网络下 尝试使用应用程序时 我遇到会话变量问题 这是代码 import os from flask import Flask request render template
  • 是否可以忽略一行的pyright检查?

    我需要忽略一行的pyright 检查 有什么特别的评论吗 def create slog group SLogGroup data Optional dict None SLog insert one SLog group group da
  • 未捕获 Func<> 的异常(异步)

    我有以下代码 为了进行此重现而进行了简化 显然 catch 异常块将包含更多逻辑 我有以下代码 void Main var result ExecuteAction async gt Will contain real async code
  • Python 函数可以从作用域之外赋予新属性吗?

    我不知道你可以这样做 def tom print tom s locals locals def dick z print z name z name z guest Harry print z guest z guest print di
  • Flask如何获取请求的HTTP_ORIGIN

    我想用我自己设置的 Access Control Allow Origin 标头做出响应 而弄清楚请求中的 HTTP ORIGIN 参数在哪里似乎很混乱 我在用着烧瓶 0 10 1 以及HTTP ORIGIN似乎是这个的特点之一object
  • Python 的“zip”内置函数的 Ruby 等价物是什么?

    Ruby 是否有与 Python 内置函数等效的东西zip功能 如果不是 做同样事情的简洁方法是什么 一些背景信息 当我试图找到一种干净的方法来进行涉及两个数组的检查时 出现了这个问题 如果我有zip 我可以写这样的东西 zip a b a
  • 在Python中获取文件描述符的位置

    比如说 我有一个原始数字文件描述符 我需要根据它获取文件中的当前位置 import os psutil some code that works with file lp lib open path to file p psutil Pro
  • Pandas:merge_asof() 对多行求和/不重复

    我正在处理两个数据集 每个数据集具有不同的关联日期 我想合并它们 但因为日期不完全匹配 我相信merge asof 是最好的方法 然而 有两件事发生merge asof 不理想的 数字重复 数字丢失 以下代码是一个示例 df a pd Da
  • 将图像分割成多个网格

    我使用下面的代码将图像分割成网格的 20 个相等的部分 import cv2 im cv2 imread apple jpg im cv2 resize im 1000 500 imgwidth im shape 0 imgheight i
  • 如何在 Python 中追加到 JSON 文件?

    我有一个 JSON 文件 其中包含 67790 1 kwh 319 4 现在我创建一个字典a dict我需要将其附加到 JSON 文件中 我尝试了这段代码 with open DATA FILENAME a as f json obj js
  • 类型错误:预期单个张量时的张量列表 - 将 const 与 tf.random_normal 一起使用时

    我有以下 TensorFlow 代码 tf constant tf random normal time step batch size 1 1 我正进入 状态TypeError List of Tensors when single Te
  • 有人用过 Dabo 做过中型项目吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们正处于一个新的 ERP 风格的客户端 服务器应用程序的开始阶段 该应用程序是作为 Python 富客户端开发的 我们目前正在评估 Dabo
  • Conda SafetyError:文件大小不正确

    使用创建 Conda 环境时conda create n env name python 3 6 我收到以下警告 Preparing transaction done Verifying transaction SafetyError Th
  • Scrapy:如何使用元在方法之间传递项目

    我是 scrapy 和 python 的新手 我试图将 parse quotes 中的项目 item author 传递给下一个解析方法 parse bio 我尝试了 request meta 和 response meta 方法 如 sc
  • 如何将输入读取为数字?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 Why are x and y下面的代码中使用字符串而不是整数 注意 在Python 2

随机推荐

  • Kotlin 中的 IntArray 与 Array

    我不确定有什么区别IntArray and an Array
  • C# 中的跨线程事件处理

    我正在使用一个框架 该框架在单独的线程中运行自己的事件调度程序 该框架可能会生成一些事件 class SomeDataSource public event OnFrameworkEvent void FrameworkCallback T
  • log4net %属性不起作用

    我有一个小型测试项目 代码如下 class Program static void Main string args log4net GlobalContext Properties logFileName log txt log4net
  • 如何使用 cURL 获取 JavaScript 加载的网页内容?

    我正在尝试从网站上获取分数表 问题是该网站正在使用显然加载的 javascriptdocument ready 因此 我似乎没有成功获取表格 我得到的只是该页面顶部的按钮 关于如何解决这个问题有什么建议或想法吗 cURL 只会为您提供页面的
  • quarto_render 从 .bat / .cmd 文件中损坏

    这有点复杂 但我认为其他人也可能遇到这个问题 四开本很棒 但一直面临一个问题 其中一个功能 quarto render 无法呈现通过 bat cmd 文件访问的脚本中的文档 如果我从 RStudio IDE 运行 R 脚本 没有问题 但通过
  • Cairo 示例适用于 Python 2.7,但不适用于 Python 3

    最简单的例子 我们通过 Gtk 创建一个窗口 添加 Gtk DrawingArea 的绘图区域 并在其上通过 Cairo 绘制文本 Example usr bin env python from gi repository import G
  • 如何获取 JSON.Net 中 JsonProperty 的名称?

    我有一堂课是这样的 JsonObject MemberSerialization OptIn public class foo JsonProperty name in json public string Bar get set etc
  • 将接口传递给 ASP.NET MVC 控制器操作方法

    在我的 ASP NET MVC 应用程序中 我有一个界面 充当多个不同视图模型的模板 public interface IMyViewModel Client Client1 get set Client Client2 get set V
  • 移动分配与标准复制和交换不兼容

    测试新的移动语义 我刚刚询问了我在使用移动构造函数时遇到的问题 但正如评论中所表明的那样 问题实际上是当您使用标准的 复制和交换 习惯用法时 移动赋值 运算符和 标准赋值 运算符发生冲突 这是我正在使用的类 include
  • 如何在 IONIC 3 中使用路由

    我正在开发一个 Ionic 3 应用程序 现在我正在使用NavController用于路由和切换页面 Ex this navCtrl push DetailsPage 但我现在需要使用 Angular 路由 我发现类似的question h
  • 使用 Mongoose 更新 MongoDB 中的许多记录的正确方法是什么

    我使用 Mongoose 从 MongoDB 中提取一些记录 将它们导入到另一个系统中 然后我想将所有这些文档的状态 文档属性 设置为processed 我可以找到这个解决方案 通过id集更新多个文档 猫鼬 https stackoverf
  • 将多个文件/文件夹从 Windows 资源管理器传递到外部应用程序

    您好 有谁知道如何让 Windows 资源管理器将多个文件 文件夹传递到注册表中引用的外部应用程序 c 我当前能够使用 1 语法对单个文件 文件夹进行操作 但不确定如何让资源管理器传递多个项目 有谁知道如何做到这一点 当您在资源管理器中选择
  • 从 ISO8601 日期时间字符串中提取时区

    如何从 Java 8 中的 ISO 8601 日期字符串中提取时区 e g String timestamp1 2014 02 15T01 02 03Z String timestamp2 2017 10 27T16 22 27 605 0
  • 如何让 git-pull 默认变得详细?

    浏览 git config 变量和 git pull 文档 我没有看到默认情况下使 git pull pull 详细的方法 有人知道有办法吗 并不是所有的东西都有一个配置参数 但你基本上可以使用别名自己处理它 alias pv pull v
  • PHP 是否阻止了粘性位?

    我尝试使用 PHP 的 chmod 将权限设置为 02775 但由于某种原因 它只将 0775 添加到文件中 我认为这可能是 PHP 的 chmod 实现或其他问题 所以我尝试使用 PHP 的 passthru 函数运行 chmod 027
  • Google 登录:拒绝为目标域生成登录提示的权限(javascript Web 应用程序)

    我正在使用 Google 登录 Javascript API 即gapi signin button 在网络应用程序上 该应用程序由 gulp 服务器提供服务 绑定到0 0 0 0 当我在本地开发时 登录过程有效 但是当我在远程服务器上运行
  • FileReader API:如何同步读取文件

    我正在尝试读取使用 html 页面上的输入类型文件选择的文件 我已经实现了读取文件的功能 并且可以读取文件内容 但实际问题是正在读取文件内容异步地它允许执行脚本的其他功能 我将读取的文件内容存储在数组中 当移动到其他函数时 数组是空的 当引
  • 使用 jQuery 对列表项进行分组

    我有一个这样的列表 ul li span class date 2011 05 01 span p Text p li li span class date 2011 05 01 span p Text p li li span class
  • 在同一个图中显示多个可用对象?

    我想在同一个 MATLAB 图中显示多个表格 就像 subplot 可用于显示多个图形一样 然而 似乎 subplot 不适用于 uitable 对象 正如您所看到的 我得到的是五组空轴 而不是分布在图中的五个表 并且只有一个表可见 有没有
  • Python 中的嵌套 try/ except

    try commands try commands try commands try commands except commands return to final commands except commands return to f