从调用者的范围内引发异常? [复制]

2023-12-31

假设我有以下脚本:

def do_not_call_on_one(i):
    if i == 1:
        raise ValueError("You never listen.")

    print "Success!"

do_not_call_on_one(1)

执行时,您将看到以下回溯:

Traceback (most recent call last):
  File "test.py", line 7, in <module>
    do_not_call_on_one(1)
  File "test.py", line 3, in do_not_call_on_one
    raise ValueError("You never listen.")
ValueError: You never listen.

是否有某种方法可以操纵调用堆栈,以便从实际导致问题的行发出错误,如下所示?:

Traceback (most recent call last):
  File "test.py", line 7, in <module>
    do_not_call_on_one(1)
ValueError: You never listen.

这将节省开发人员的时间,否则开发人员将浪费时间扫描调用堆栈、搜索错误使用的函数,而可以提前定义正确的行为。

Python 中是否有任何内容允许异常使用修改后的回溯?

Update

有一些程序正在复制此功能:

# In test.py:
int('a')

# Executing 'python test.py' yields:
Traceback (most recent call last):
  File "test.py", line 1, in <module>
    int('a')
ValueError: invalid literal for int() with base 10: 'a'

Note:回溯不会下降到int()函数显示一堆无用的范围(尤其是无用的范围)raise ValueError本身)。


tl;dr:可能是的,但我无法想象这是一个好主意。

我假设,如果我们足够努力的话,我们可以伪造一个调用堆栈来显示来自不同地方的异常。但我认为这不是一个好主意。

首先,人们普遍认为引发异常的函数并不总是有错误。如果有人违反了合同并向您传递了您不期望的参数,则可以引发异常。如果这是为了通过在调用者范围内引发异常来掩盖你的屁股,这样就没有人责怪你的函数,我认为有人(也许是你,也许是你的自动化测试的“责备”系统)需要重新考虑他们如何确定责任。

其次,我认为你不能很好地定义“正确”的范围。您可能会认为它应该始终在调用者的范围内引发,因为显然它不是your过错。好吧,如果不是怎么办?their也有错吗?当异常发生时,每个函数都应该举手说“这不是我的错”吗?很快我们的堆栈跟踪就不会说什么了。

即使你是对的,并且你的函数是无可指责的,你也会让其他人的生活变得地狱,因为操纵调用堆栈来隐藏你的函数会让每个人摸不着头脑,并删除调试情况的宝贵证据。

这似乎是一个好主意,但我不这么认为,而且我认为如果你把自己放在别人的立场上,你就会明白尝试使用这种行为方式的函数会给他们的生活带来多么困难。

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

从调用者的范围内引发异常? [复制] 的相关文章

  • Python - 比较同一字典中的值

    我有一本字典 d Trump MAGA FollowTheMoney Clinton dems Clinton Stein FollowTheMoney Atlanta 我想删除字符串列表中的重复字符串 该字符串是键的值 对于这个例子 期望
  • 计算另一个字符串中多个字符串的出现次数

    在 Python 2 7 中 给定以下字符串 Spot是一只棕色的狗 斑点有棕色的头发 斑点的头发是棕色的 查找字符串中 Spot brown 和 hair 总数的最佳方法是什么 在示例中 它将返回 8 我正在寻找类似的东西string c
  • Gunicorn 工作人员无论如何都会超时

    我正在尝试通过gunicorn运行一个简单的烧瓶应用程序 但是无论我做什么 我的工作人员都会超时 无论是否有针对应用程序的活动 工作人员在我设置任何内容后总是会超时timeout值到 是什么导致它们超时 当我发出请求时 请求成功通过 但工作
  • Django Rest Framework 是否有第三方应用程序来自动生成 swagger.yaml 文件?

    我有大量的 API 端点编写在django rest framework并且不断增加和更新 如何创建和维护最新的 API 文档 我当前的版本是 Create swagger yaml文件并以某种方式在每次端点更改时自动生成 然后使用此文件作
  • 如何从Python中的函数返回多个值? [复制]

    这个问题在这里已经有答案了 如何从Python中的函数返回多个变量 您可以用逗号分隔要返回的值 def get name you code return first name last name 逗号表示它是一个元组 因此您可以用括号将值括
  • 使用主题交换运行多个 Celery 任务

    我正在用 Celery 替换一些自制代码 但很难复制当前的行为 我期望的行为如下 创建新用户时 应向tasks与交换user created路由键 该消息应该触发两个 Celery 任务 即send user activate email
  • 在 Django Admin 中调整字段大小

    在管理上添加或编辑条目时 Django 倾向于填充水平空间 但在某些情况下 当编辑 8 个字符宽的日期字段或 6 或 8 个字符的 CharField 时 这确实是一种空间浪费 字符宽 然后编辑框最多可容纳 15 或 20 个字符 我如何告
  • Python 3d 绘图设置固定色阶

    我正在尝试绘制两个 3d 数组 第一个数组的 z 值在范围内 0 15 0 15 第二个来自 0 001 0 001 当我绘图时 色标自动遵循数据范围 如何设置自定义比例 我不想看到 0 001 的浅色 而应该看到 0 15 的浅色 如何修
  • 为什么 web2py 在启动时崩溃?

    我正在尝试让 web2py 在 Ubuntu 机器上运行 所有文档似乎都表明要在 nix 系统上运行它 您需要下载源代码并执行以下操作 蟒蛇 web2py py 我抓住了source http www web2py com examples
  • Pycharm 在 os.path 连接上出现“未解析的引用”

    将pycharm升级到2018 1 并将python升级到3 6 5后 pycharm报告 未解析的引用 join 最新版本的 pycharm 不会显示以下行的任何警告 from os path import join expanduser
  • MongoEngine 查询具有以列表中指定的前缀开头的属性的对象的列表

    我需要在 Mongo 数据库中查询具有以列表中任何前缀开头的特定属性的元素 现在我有一段这样的代码 query mymodel terms term in query terms 并且这会匹配在列表 term 上有一个项目的对象 该列表中的
  • GUI(输入和输出矩阵)?

    我需要创建一个 GUI 将数据输入到矩阵或表格中并读取此表单数据 完美的解决方案是限制输入表单仅允许float 例如 A 1 02 0 25 0 30 0 515 0 41 1 13 0 15 1 555 0 25 0 14 1 21 2
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • 无法导入 langchain.agents.load_tools

    我正在尝试使用 LangChain Agents 但无法导入 load tools 版本 langchain 0 0 27 我尝试过这些 from langchain agents import initialize agent from
  • 当字段是数字时怎么说...在 mongodb 中匹配?

    所以我的结果中有一个名为 城市 的字段 结果已损坏 有时它是一个实际名称 有时它是一个数字 以下代码显示所有记录 db zips aggregate project city substr city 0 1 sort city 1 我需要修
  • Django REST Framework - CurrentUserDefault 使用

    我正在尝试使用CurrentUserDefault一个序列化器的类 user serializers HiddenField default serializers CurrentUserDefault 文档说 为了使用它 请求 必须作为
  • 带有 LSTM 的 GridSearchCV/RandomizedSearchCV

    我一直在尝试通过 RandomizedSearchCV 调整 LSTM 的超参数 我的代码如下 X train X train reshape X train shape 0 1 X train shape 1 X test X test
  • 重新分配唯一值 - pandas DataFrame

    我在尝试着assign unique值在pandas df给特定的个人 For the df below Area and Place 会一起弥补unique不同的价值观jobs 这些值将分配给个人 总体目标是使用尽可能少的个人 诀窍在于这
  • 根据 Pandas 中的列表选择数据框行的子集

    我有一个数据框df1并列出x In 22 import pandas as pd In 23 df1 pd DataFrame C range 5 B range 10 20 2 A list abcde In 24 df1 Out 24
  • pytest找不到模块[重复]

    这个问题在这里已经有答案了 我正在关注pytest 良好实践 https docs pytest org en latest explanation goodpractices html test discovery或者至少我认为我是 但是

随机推荐

  • 如何在 ES6 中创建主导入文件?

    我正在寻找使用创建一个主导入文件ES6句法 我有一个组件目录index js file 我想export如果有意义的话 进口 本质上 我想将各个组件文件导入然后导出到索引文件中 以便我可以解构我的imports来自任何其他文件 如下所示 i
  • jQuery 颜色 **样本** 选择器

    有没有人编写了一个 jQuery 查询颜色选择器 可以让您从预定的颜色列表中选择颜色 类似于电子商务网站上的产品颜色选择器 我所做的大部分搜索都揭示了许多通用目的 即在 RGB 光谱中选择任何颜色 但很少有用于选择特定颜色的选项 我制造了一
  • 调整 HTML5 画布大小以适合窗口

    如何自动缩放 HTML5
  • Firebase云功能自定义域[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何将 firebase 的新 HTTPS 云功能连接到自定义域 因此 例如 example com 将转到 us central1 MY
  • Tomcat 8 无法加载网站

    我是 java servlet 编程的新手 正在学习这一点 我的 debian 计算机上安装的 tomcat 最初可以显示默认的示例网页 但是将 var lib tomcat8 webapps ROOT 中的加载文件替换为示例页面后 网站无
  • Retrofit2 反序列化响应主体,即使响应不是 200

    我希望能够反序列化对同一 Java 对象的网络响应 即使响应不成功 目前 当我收到像 403 这样的错误响应时 响应正文为空 我希望使用 response errorBody 方法来读取已发回的任何内容 这是可以的 但是我想避免在改造回调中
  • Go 语言中的 >> 是什么意思?

    我正在寻找有关 Google Go 语言的信息 在 A Tour of Go 中 他们有这样的代码 const Big 1 lt lt 100 Small Big gt gt 99 但做什么 lt lt and gt gt mean 您可以
  • 如何在python jinja模板中输出loop.counter?

    我希望能够将当前循环迭代输出到我的模板 根据the docs https jinja palletsprojects com en 3 0 x templates 有一个loop counter我尝试使用的变量 ul for user in
  • android:camera.getParameters() 使应用程序崩溃

    我正在使用此代码将相机 LED 用作手电筒 但在服务启动时它崩溃了 使用 Log w 语句我发现它停在 param camera getParameters 处 我已将 android permission CAMERA 包含在我的清单中
  • .NET Core MVC - 带有前缀绑定的 AJAX POST 请求

    我想通过 AJAX 向带有模型前缀的控制器发送请求 我需要一个前缀 因为我在一页上有两个具有相似模型属性的表单 asp for 正在生成相似的 ID 和名称 我正在使用 NET Core 3 1 请求帖子无需前缀即可正常工作 当我使用如下例
  • 在 Swift 2.0 中创建 CMSampleBuffer 的副本

    之前已经有人问过这个问题 但自从问过这个问题以来 Swift 中肯定发生了一些变化 我正在尝试存储CMSampleBuffer从返回的对象AVCaptureSession待稍后处理 经过一些实验我发现AVCaptureSession必须重用
  • Tridion CME 如何从包含多个 AD-LDAP 的域中选择特定的 AD-LDAP?

    实施有AD SDL Tridion CMS MMC 控制台没有任何 AD LDAP 集成 无同步或任何其他功能 只是一个简单的香草安装 这意味着用户在 AD 中创建 然后在 CMS 中手动添加 并在 CME 中授予权限 访问权限 当我们添加
  • 如何使用反应形式设置单选按钮值?

    这是我的组件类 我尝试将表单单选按钮值设置为 1 import FormGroup FormControl from angular forms export class myComponent implements OnInit page
  • OpenCV 项目点在投影之前如何执行转换?

    我有两个 3d 点 我试图使用它们将其投影到 2d 图像平面上cv projectPoints 最初这些点不在相机的参考系中 所以我必须转换它们 我正在测试该方法转换的有效性 首先 我手动将平移应用于我的点 并通过旋转矩阵绕 x 轴进行 9
  • 为什么我不能将 COM 对象转换为它在 C# 中实现的接口?

    我在 dll 中有这个接口 此代码显示在 Visual Studio 中的元数据中 region Assembly XCapture dll v2 0 50727 d svn dashboard trunk Source MockDiagn
  • 我想让 EditorFor 文本框仅接受数字

    这是我的视图模型 Required ErrorMessageResourceType typeof Resources ValidationsResources ErrorMessageResourceName Required Range
  • SwiftUI:删除 ForEach 中的最后一行

    我正在尝试删除 a 中的行ForEach 删除最后一行总是会引发索引超出范围异常 删除任何其他行则不会 ForEach Array player scores enumerated id element index score in HSt
  • 如何将两个字符串转换为整数以使数学正确?

    我想要结果 no 5 但我得到 no 23 public class Assignment3 public static void main String args String str1 2 String str2 3 System ou
  • 使用 dockerfile 克隆私有 git 存储库

    我从似乎是各种工作的 dockerfiles 中复制了这段代码 这是我的 FROM ubuntu MAINTAINER Luke Crooks email protected cdn cgi l email protection Updat
  • 从调用者的范围内引发异常? [复制]

    这个问题在这里已经有答案了 假设我有以下脚本 def do not call on one i if i 1 raise ValueError You never listen print Success do not call on on