以编程方式列出异常-Python

以编程方式列出异常-Python,python,Python,有没有办法通过编程确定对象或方法可能引发哪些异常 像dir(obj)列出可用的方法一样,我正在寻找等价的dir\u异常(obj) 据我所知,实现这一点的唯一方法是解析源代码。我认为这是不可能的。异常是一种运行时现象,只有在运行时才能知道可能发生什么(或发生什么)。你为什么要这么做 我认为这是不可能的。异常是一种运行时现象,只有在运行时才能知道可能发生什么(或发生什么)。你为什么要这么做 在这一点上,您似乎必须信任代码的开发人员:如果他们做得很好,方法/类文档应该列出可能引发的所有异常。在这一点上

有没有办法通过编程确定对象或方法可能引发哪些异常

dir(obj)
列出可用的方法一样,我正在寻找等价的
dir\u异常(obj)


据我所知,实现这一点的唯一方法是解析源代码。

我认为这是不可能的。异常是一种运行时现象,只有在运行时才能知道可能发生什么(或发生什么)。你为什么要这么做

我认为这是不可能的。异常是一种运行时现象,只有在运行时才能知道可能发生什么(或发生什么)。你为什么要这么做

在这一点上,您似乎必须信任代码的开发人员:如果他们做得很好,方法/类文档应该列出可能引发的所有异常。

在这一点上,您似乎必须信任代码的开发人员:如果他们做得很好,方法/类文档应该列出可能引发的所有异常。

我认为这也不可能,但是如果您相信程序员在名称中使用了“
Exception
”或“
Error
”,那么您可以对类执行
dir
,并搜索以“
Exception
”或“
Error
”。除此之外(这本身就相当粗糙),我看不到一种简单的/本机的/惯用的方法来实现这一点,我认为这也不可能,但如果您相信程序员已经用“
Exception
”或“
Error
“在名称中,然后可以对类执行
dir
,并搜索以“
Exception
”或“
Error
”结尾的元素。”。除此之外(这本身就相当粗糙),我看不到一种简单的/本地的/惯用的方法来做这件事

大多数python开发人员都是从异常派生的,所以如果您不确定,只需捕获异常即可

try:
    some_secret_code()
except Exception:
    print 'oops, something happened'
如果您认为可以导入一个模块并四处寻找从Exception派生的东西,那么这也不太管用。那么做这个的python螺母呢->

exec "raise SystemExit()"

我不确定是否有不实用的方法来实现这一点。

不,没有实用的方法来实现这一点

大多数python开发人员都是从异常派生的,所以如果您不确定,只需捕获异常即可

try:
    some_secret_code()
except Exception:
    print 'oops, something happened'
如果您认为可以导入一个模块并四处寻找从Exception派生的东西,那么这也不太管用。那么做这个的python螺母呢->

exec "raise SystemExit()"

我不确定是否有一种不实用的方法来实现这一点。

我打赌我想做一些类似的事情:
尝试{blah()}catch dir_exceptions(blah){}
这肯定是不可能的。在Python中,甚至可以根据一些奇怪的随机数据动态生成异常类。这当然毫无意义,但这是可能的@平民:Python不是Java。Python的等价物是
try:blah
除了:blah
@nmichaels或者(通常)更好:
除了例外:
@nmichaels:我认为这是怀疑的好处,并假设他对块使用大括号,仅仅是因为由于缺少换行符,它们更容易在注释中写入和读取。至少,每当我需要在注释中嵌入多行代码片段时,我都会这样做。我甚至不懂Java;)我打赌我想做一些类似的事情:
try{blah()}catch dir_exceptions(blah){}
这肯定是不可能的。在Python中,甚至可以根据一些奇怪的随机数据动态生成异常类。这当然毫无意义,但这是可能的@平民:Python不是Java。Python的等价物是
try:blah
除了:blah
@nmichaels或者(通常)更好:
除了例外:
@nmichaels:我认为这是怀疑的好处,并假设他对块使用大括号,仅仅是因为由于缺少换行符,它们更容易在注释中写入和读取。至少,每当我需要在注释中嵌入多行代码片段时,我都会这样做。我甚至不懂Java;)考虑该方法可能调用库函数,这些函数本身可能会引发任意异常。可能的副本(参见NufAl的答案注释)认为该方法可能调用库函数,它们本身可能会引发任意异常。异常是它们自己类的实例,将异常类或实例作为另一个类的成员是极不寻常的。通常,您会在本地匿名创建一个异常并立即引发它:
raisevalueerror(“非法值”)
异常是它们自己类的实例,将一个异常类或实例作为另一个类的成员是极不寻常的。通常在本地匿名创建异常并立即引发:
raisevalueerror(“非法值”)