Python 引发命名异常和未命名异常之间的差异

Python 引发命名异常和未命名异常之间的差异,python,exception-handling,Python,Exception Handling,以下两者之间有区别吗 try: <some code> except SomeException as err: raise err 试试看: 除了一些异常作为错误: 提出错误 试试看: 除了一些例外: 提升 ,单独使用raise语句只会重新引发当前范围中活动的最后一个异常raiseerr解析err[,None,None]并确定需要引发err 这意味着第一个版本(raiseerr)将给出raiseerr行作为堆栈跟踪的基础。bareraise语句将退出并重新引发

以下两者之间有区别吗

try:
    <some code>
except SomeException as err:
    raise err
试试看:
除了一些异常作为错误:
提出错误

试试看:
除了一些例外:
提升
,单独使用
raise
语句只会重新引发当前范围中活动的最后一个异常
raiseerr
解析
err[,None,None]
并确定需要引发
err

这意味着第一个版本(
raiseerr
)将给出
raiseerr
行作为堆栈跟踪的基础。bare
raise
语句将退出并重新引发最后一个错误,而不触及它,这将保留原始堆栈跟踪

# raise err
Traceback (most recent call last):
  File "foo.py", line 4, in <module>
    raise err
Exception: bar

# raise
Traceback (most recent call last):
  File "foo.py", line 2, in <module>
    raise Exception('bar')
Exception: bar
#升高错误
回溯(最近一次呼叫最后一次):
文件“foo.py”,第4行,在
提出错误
例外:酒吧
#提高
回溯(最近一次呼叫最后一次):
文件“foo.py”,第2行,在
引发异常('bar'))
例外:酒吧
,单独使用
raise
语句只会重新引发当前范围中活动的最后一个异常
raiseerr
解析
err[,None,None]
并确定需要引发
err

这意味着第一个版本(
raiseerr
)将给出
raiseerr
行作为堆栈跟踪的基础。bare
raise
语句将退出并重新引发最后一个错误,而不触及它,这将保留原始堆栈跟踪

# raise err
Traceback (most recent call last):
  File "foo.py", line 4, in <module>
    raise err
Exception: bar

# raise
Traceback (most recent call last):
  File "foo.py", line 2, in <module>
    raise Exception('bar')
Exception: bar
#升高错误
回溯(最近一次呼叫最后一次):
文件“foo.py”,第4行,在
提出错误
例外:酒吧
#提高
回溯(最近一次呼叫最后一次):
文件“foo.py”,第2行,在
引发异常('bar'))
例外:酒吧

是<代码>除了SomeException as err之外,您还可以调用该异常对象的函数,如本教程片段所示:


然后,您可以在任一代码段中重新播放它。

是<代码>除了SomeException as err之外,您还可以调用该异常对象的函数,如本教程片段所示:


然后,您可以在任意一个代码段中重新调用它。

第一个代码段从再次引发异常的点重新写入异常的堆栈跟踪,因此它显示为在第
行raise err
处引发。第二个单独保留stacktrace,因此它显示为已在

中的某个位置引发。第一个从再次引发异常的点重新写入异常的stacktrace,因此它显示为已在
raise err
行引发。第二个单独保留stacktrace,因此它显示为在

中的某个位置被提升。请注意,区别在于
提升
语句,而不是
除了
语句。您仍然可以使用“anonymous”
raise
传递异常,即使您已将某个异常作为错误执行
。请注意,区别在于
raise
语句,而不是
except
语句。您仍然可以使用“anonymous”
raise
传递异常,即使您已经执行了
操作,但某些异常作为错误:
except IOError as e:
  print "I/O error({0}): {1}".format(e.errno, e.strerror)