Python:ValueError和Exception之间的区别?

vla*_*rad 7 python error-handling exception

我试图了解提出ValueError和Exception之间的区别.我已经尝试了两个相同的代码(即使在同一个分支),结果是相同的 - 我收到了一条错误消息.

我在SO上对这个问题进行了研究,但没有对此进行讨论.然后我阅读了异常的文档,并找到了ValueError 的以下定义:

当内置操作或函数接收到具有正确类型但不适当值的参数时引发,并且情况不会被更精确的异常描述,例如IndexError.

据我了解,Exception是一个更通用的术语,ValueError可以应用于某些特定情况.但由于提高两者的结果是相同的,我想了解,区分ValueError和Exception的实际意义是什么.Python版本应该在这里不相关.谢谢!

编辑:感谢您的回答,我得到了它,try-exception构造中两个术语之间的区别是什么.但是,如果只是提高它们,它们如何区别,而不是除外?

raise Exception('blah') 
Run Code Online (Sandbox Code Playgroud)

raise ValueError('blah') 
Run Code Online (Sandbox Code Playgroud)

回答@PeterWood:在这两种情况下我都得到错误消息"blah",但在一种情况下它是"Exception:blah",在第二种情况下:"ValueError:blah".我认为在这种情况下他们两者之间没有实际区别.

Jea*_*bre 13

ValueError继承自Exception.您可以决定仅捕获ValueError,或者Exception,这是什么异常继承.

在这个例子中:

try:
    a=12+"xxx"
except Exception:
    # exception is trapped (TypeError)
Run Code Online (Sandbox Code Playgroud)

异常被捕获,所有异常(BaseException异常除外)都被except语句捕获.

在另一个例子中:

try:
    a=12+"xxx"
except ValueError:
    # not trapped
Run Code Online (Sandbox Code Playgroud)

这里,异常没有被捕获(TypeError不是ValueError也不是继承)

您通常使用特定的异常来仅捕获可能发生的异常(最好的例子是IOError处理文件时),并将其余部分保留为未捕获的.捕获所有异常的危险在于获得一段不会崩溃但什么都不会崩溃的代码.

(当您引发异常时编辑答案以响应您的编辑:):您正在创建的实例Exception将被未来的except ValueError:语句过滤掉.消息是不同的,因为异常的表示(打印时)包括异常类名称.