Python “如何修复”;不推荐使用的引发异常的形式;警告
假设我有以下代码:Python “如何修复”;不推荐使用的引发异常的形式;警告,python,python-2.7,exception,Python,Python 2.7,Exception,假设我有以下代码: import sys import traceback class MyException(Exception): pass def bar(): [][1] def foo(): bar() try: try: foo() except Exception as ex: type, value, tb = sys.exc_info() raise MyException,
import sys
import traceback
class MyException(Exception):
pass
def bar():
[][1]
def foo():
bar()
try:
try:
foo()
except Exception as ex:
type, value, tb = sys.exc_info()
raise MyException, ("You did something wrong!", type, value), tb
except LolException:
print(traceback.format_exc())
它在PyCharm中给出了“引发异常的不推荐形式”警告。我怎样才能修好它?我需要保存原始异常信息。尝试通过以下方式引发异常:
import sys
import traceback
class MyException(Exception):
pass
class LolException(Exception):
pass
def bar():
[][1]
def foo():
bar()
try:
try:
foo()
except Exception as ex:
raise MyException(str(ex)+" You did something wrong!"), \
None, sys.exc_info()[2]
except LolException:
print(traceback.format_exc())
输出:
回溯(最近一次呼叫最后一次):
文件deprecated.py,第21行,在
foo()
foo中第17行的deprecated.py文件
bar()
bar中第14行的deprecated.py文件
[][1]
__main.MyException:列表索引超出范围您做错了什么!
否,这不是重复的,因为我需要保存原始信息此问题的实际答案仅在对另一个问题答案的注释中。这仍然是合法副本吗?@Jonas Wielicki谢谢!我也可以添加原始异常类型的信息吗?只要这个问题以重复的形式结束,你可能应该在重复的问题中问这个问题。谢谢!这种情况下的“无”是什么?如果仔细阅读raise
语句上的,第三段说“如果第一个对象是实例,异常的类型是实例的类,实例本身是值,第二个对象必须是None
”为了能够提供可选的第三个对象,您必须在其中包含一些值,该对象必须是None
或回溯对象(如果存在)。