当前位置:  开发笔记 > 编程语言 > 正文

我应该在Python中针对坏/非法参数组合提出哪个例外?

如何解决《我应该在Python中针对坏/非法参数组合提出哪个例外?》经验,为你挑选了4个好方法。

我想知道在Python中指示无效参数组合的最佳实践.我遇到过一些你有这样功能的情况:

def import_to_orm(name, save=False, recurse=False):
    """
    :param name: Name of some external entity to import.
    :param save: Save the ORM object before returning.
    :param recurse: Attempt to import associated objects as well. Because you
        need the original object to have a key to relate to, save must be
        `True` for recurse to be `True`.
    :raise BadValueError: If `recurse and not save`.
    :return: The ORM object.
    """
    pass

唯一令人烦恼的是,每个包装都有自己的,通常略有不同BadValueError.我知道在Java中存在java.lang.IllegalArgumentException- 是否很好理解每个人都将BadValueError在Python中创建自己的s或者是否有另一种首选方法?



1> dbr..:

我只会提出ValueError,除非你需要一个更具体的例外.

def import_to_orm(name, save=False, recurse=False):
    if recurse and not save:
        raise ValueError("save must be True if recurse is True")

真的没有意义class BadValueError(ValueError):pass- 您的自定义类与ValueError的使用完全相同,那么为什么不使用它呢?


>"那么为什么不用那个呢?" - 特异性.也许我想要抓住一些外层"MyValueError",但不是任何/所有"ValueError".
是的,因此,特殊性问题的一部分是引发ValueError的地方.如果被调用函数喜欢你的参数但在内部调用math.sqrt(-1),则调用者可能会捕获ValueError,期望***参数不合适.也许你只是在这种情况下检查消息......
我不确定这个论点是否成立:如果有人调用`math.sqrt(-1)`,那么这是一个需要修复的编程错误.`ValueError`不是要在正常的程序执行中捕获,也不是从`RuntimeError`派生的.

2> Markus Jarde..:

我会继承 ValueError

class IllegalArgumentError(ValueError):
    pass

有时候创建自己的异常更好,但是从内置的异常继承,尽可能接近你想要的.

如果您需要捕获该特定错误,那么拥有一个名称会很有帮助.


@HamishGrubijan视频很糟糕.当有人建议好好利用课程时,他只是咩咩叫"不要上课".辉煌.课程很好.[但不要相信我的话](http://lucumr.pocoo.org/2013/2/13/moar-classes/).
停止编写类和自定义异常 - http://pyvideo.org/video/880/stop-writing-classes
@RayLuo你可能有理智 - 检查了视频的内容,并将其转换成了一个可爱的,明智的替代信息,但这就是视频所说的,而且那些没有太多经验和常识的人将会离开用.
@RobertGrant不,你不明白.该视频实际上并不是"不使用类".这是关于不要过于复杂的事情.
@SamuelSantana就像我说的那样,任何人都举起手来说"X怎么样?" 在那里,X是一个好主意,他只是说,"不要再上一堂课." 很清楚.我同意关键是平衡; 问题是实际生活过于模糊:-)

3> 小智..:

我认为处理这个的最好方法是python本身处理它的方式.Python引发了一个TypeError.例如:

$ python -c 'print(sum())'
Traceback (most recent call last):
File "", line 1, in 
TypeError: sum expected at least 1 arguments, got 0

我们的初级开发人员刚刚在google搜索"python exception错误论点"中找到了这个页面,我很惊讶,自从提出这个问题以来,十年内没有人提出明显(对我而言)的答案.


没什么让我感到惊讶的,但是我100%同意,如果传递给函数的某些参数的类型错误,则TypeError是正确的异常。如果变量的类型正确,但其内容和值没有意义,则可以使用ValueError。

4> Eli Courtwri..:

我大多只看到ValueError在这种情况下使用的内置.

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有