相关疑难解决方法(0)

在Python中使用"assert"有什么用?

我一直在阅读一些源代码,在一些地方我已经看到了它的用法assert.

这究竟是什么意思?它的用途是什么?

python assert assertions

860
推荐指数
15
解决办法
67万
查看次数

python:我应该使用ValueError还是创建自己的子类来处理无效字符串?

可能重复:
我应该在Python中针对坏/非法参数组合引发哪个异常?

我查看了python内置的异常,唯一看起来很接近的是ValueError.

来自python文档:

exception ValueError: 当内置操作或函数接收到具有正确类型但值不合适的参数的情况时引发,并且情况不会由更准确的异常(如IndexError)描述.

我应该创建ValueError的子类,如InvalidFormatException吗?

(我的具体情况是,如果罗马数字字符串格式不正确,但还有许多其他适用的情况.)

编辑:似乎ValueError是正确的选择,现在的问题是直接使用ValueError还是将其子类化.

python exception

8
推荐指数
1
解决办法
4757
查看次数

python中缺失值的标准异常是什么?

在缺少正确执行函数的值的情况下,应该使用哪个标准 python 异常(如果有)?TypeError并且ValueError似乎很好的候选人给我,但根据文档(我的斜体字):

传递错误类型的参数(例如,listint预期为an 时传递 a )应导致 a TypeError,但传递具有错误值(例如超出预期边界的数字)的参数应导致 a ValueError

ValueError:当操作或函数接收到类型正确但值不合适的参数时引发,并且这种情况没有用更精确的异常(例如 IndexError )描述。

在我看来,这些描述都不能完全抓住缺失值的概念。但标准中的其他例外似乎也没有接近。

这是一个例子。类型的对象myclass可以通过两种不同的方式实例化,每种方式都需要一个特定的参数。如果两者均未提供,则 init 将失败。

class myclass(object):
    def __init__(self,firstparam=None,secondparam=None):
        if firstparam:
             self.firstinit()
        elif secondparam:
             self.secondinit()
        else:
           #What to put here ?
           raise Exception("Missing value for myclass")

if __name__=="__main__":
    #oops, forgot to specify a parameter here !
    myobj=myclass()
    
Run Code Online (Sandbox Code Playgroud)

当然,我知道MissingValueError在编写库时我总是可以实现自己的异常子类。我问这个问题是为了不重复标准中可能已经存在的东西。

python exception

4
推荐指数
1
解决办法
3225
查看次数

标签 统计

python ×3

exception ×2

assert ×1

assertions ×1