我在SO上对这个问题进行了研究,但没有对此进行讨论.然后我阅读了异常的文档,发现了以下definition的ValueError:
Raised when a built-in operation or function receives an argument that has the right type but an inappropriate value,and the situation is not described by a more precise exception such as
IndexError
.
据我了解,Exception是一个更通用的术语,ValueError可以应用于某些特定情况.但由于提高两者的结果是相同的,我想了解,区分ValueError和Exception的实际意义是什么. Python版本应该在这里不相关.谢谢!
编辑:
感谢您的回答,我得到了它,try-exception构造中两个术语之间的区别是什么.但是,如果只是提高它们,它们如何区别,而不是除外?
raise Exception('blah')
和
raise ValueError('blah')
回答@PeterWood:在这两种情况下我都得到错误消息“blah”,但在一种情况下它是“Exception:blah”,在第二种情况下:“ValueError:blah”.我认为在这种情况下他们两者之间没有实际区别.
解决方法
在这个例子中:
try: a=12+"xxx" except Exception: # exception is trapped (TypeError)
异常被捕获,所有异常(除了BaseException异常)都被except语句捕获.
在另一个例子中:
try: a=12+"xxx" except ValueError: # not trapped
这里,异常没有被捕获(TypeError不是ValueError并且不继承)
您通常使用特定的异常来仅捕获可能发生的异常(最好的例子是处理文件时的IOError),并保留其余的未处理的异常.捕获所有异常的危险在于获得一段不会崩溃但什么都不会崩溃的代码.
(当你引发异常时编辑答案以响应你的编辑:):你正在创建一个Exception实例,除了ValueError:语句之外,它将被过滤掉.消息是不同的,因为异常的表示(打印时)包括异常类名称.