【问题标题】:Why is not "a good programming" to throw exception for evreything? [duplicate]为什么不是“一个好的编程”来为所有事情抛出异常? [复制]
【发布时间】:2014-02-24 20:39:53
【问题描述】:

最近在我拥有的一个项目中,在 python 和 pygame 中,我意识到导致游戏运行时错误的(硬件)问题。所以游戏在运行中停止。我为解决这个问题所做的就是在导致错误的命令上抛出所有异常(这是一个特殊的命令)。

我不知道那是什么类型的错误,所以我认为这是一种“运行时错误”,因此要为运行时错误抛出异常,您需要知道字符串或更好解释器给出的错误信息。所以我避免了这种情况,我只是针对任何类型的错误对命令进行了抛出异常。

在某处我读到这不太好。但是虽然游戏没有用户输入(有用户交互但不是用户输入,意思是用户不输入数字或类似的东西)为什么要冒险并将错误指定为运行时错误,哪个可能不是?

因此,如果您对上述问题有任何想法,我将很高兴得到您的回答,但我的主要问题是:Why is not "a good programming" to throw exception for evreything?

【问题讨论】:

  • 这根本不是问题。你到底想回答什么?您是否正在为这种观点收集论据?
  • @frans:我不同意,首先原则上 - 如果你可以有一个有效的问题表明,“为什么捕获所有异常是一个坏主意”,那么为什么它是一个坏主意一个问题,“为什么抛出异常是个坏主意”?其次,这个问题确实有一个明确而客观的答案,因为大多数开发人员会认为没有上下文的异常是噩梦。

标签: python throw


【解决方案1】:

抛出异常的行为表明,作为开发人员,您的应用程序的这一层不适合处理异常。它必须在更高的某个层进行处理。

最好尽可能具体了解您遇到的错误类型。您无法确定您收到的是NameError 还是ZeroDivisionError,因为它们都将是Exception。仅仅抛出Exception 会告诉你作为开发人员,“出了点问题......”,并且不够具体,无法开始诊断。

如果你要扔Exception停下,想想你为什么要这么做。如果您这样做是为了平息一些疯狂的运行时边缘情况,那么改为修复边缘情况。如果您这样做是因为该方法正在做出假设,那么验证您的假设并确保它是抓到别的地方了。

如果您必须抛出异常,请具体说明您要抛出的异常是什么。它将帮助您进行调试并帮助您提高代码质量。

【讨论】:

  • 我在 PC 上测试我的应用程序,出于硬件目的,游戏抛出错误。所以我的代码没问题,但我想尽量减少停止的可能性。所以我真正要做的是,如果有一个错误会停止游戏,那么就避免这种情况,因为错误发生在一个不是很重要的事情上。
  • 如果错误可能会停止您的应用程序的执行,那么找出它是什么并修复它。仅仅忽略它并拆除应用程序是一个非常非常糟糕的主意。
  • 不,你会捕捉异常并且不会在没有任何声音的情况下播放。对于这个应用来说,没有声音听起来不像是一个表演障碍。
  • 但确实如此。我的应用程序在计算机上停止,并显示没有安装声卡或类似的错误。当我抛出异常并且不加载音乐时,程序运行完美。
  • 我想你不知道什么是抛出异常。引发额外的异常永远不会阻止程序崩溃。恰恰相反。
猜你喜欢
  • 1970-01-01
  • 2021-07-08
  • 1970-01-01
  • 2021-04-17
  • 2016-05-10
  • 2014-07-09
  • 2010-12-09
  • 2015-02-23
  • 2011-12-12
相关资源
最近更新 更多