在引发异常时获取指定的变量,python异常处理

在引发异常时获取指定的变量,python异常处理,python,exception,Python,Exception,我想找到一种方法,在出现异常之前获取我分配的变量。例如,如果代码是 try: a=b c=d e=f except: bla bla 在“e=f”处生成了一个异常,我仍然想要a=b和c=d 可能吗?我意识到我可以做多次尝试陈述,但有什么我可以一步做的吗 try: a = "foo" c = "bar" e = unknown_function() except: pass print a, c # prints "foo bar" a和c都已设置,您只需在处

我想找到一种方法,在出现异常之前获取我分配的变量。例如,如果代码是

try:
  a=b
  c=d
  e=f
except:
  bla bla
在“e=f”处生成了一个异常,我仍然想要a=b和c=d

可能吗?我意识到我可以做多次尝试陈述,但有什么我可以一步做的吗

try:
  a = "foo"
  c = "bar"
  e = unknown_function()
except:
  pass

print a, c # prints "foo bar"
a
c
都已设置,您只需在处理异常后使用它们的值即可<代码>e未设置为任何值,因为在执行该行时引发了异常

a
c
都已设置,您只需在处理异常后使用它们的值即可<代码>e未设置为任何值,因为在执行该行时引发了异常

a
c
都已设置,您只需在处理异常后使用它们的值即可<代码>e未设置为任何值,因为在执行该行时引发了异常


a
c
都已设置,您只需在处理异常后使用它们的值即可<代码>e没有设置为任何值,因为在执行该行时引发了异常。

是的,这是完全可能的。下面是一个演示:

>>> try:
...     a = 1
...     b = 2
...     c = 1/0 # This will raise a ZeroDivisionError
... except ZeroDivisionError:
...     print 'an error occurred'
...
an error occurred
>>> a  # a still exists
1
>>> b  # so does b
2
>>> c  # only c is undefined
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'c' is not defined
>>>
>>试试:
...     a=1
...     b=2
...     c=1/0#这将产生零分错误
... 除零误差外:
...     打印“发生错误”
...
发生了一个错误
>>>a#a仍然存在
1.
>>>b#b也是
2.
>>>只有c是未定义的
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
NameError:未定义名称“c”
>>>

设计用于在引发异常之前正常执行try块中的代码。发生这种情况时,try块将立即退出。这意味着只有引发异常的行之后的代码才会被忽略。

是的,这是完全可能的。下面是一个演示:

>>> try:
...     a = 1
...     b = 2
...     c = 1/0 # This will raise a ZeroDivisionError
... except ZeroDivisionError:
...     print 'an error occurred'
...
an error occurred
>>> a  # a still exists
1
>>> b  # so does b
2
>>> c  # only c is undefined
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'c' is not defined
>>>
>>试试:
...     a=1
...     b=2
...     c=1/0#这将产生零分错误
... 除零误差外:
...     打印“发生错误”
...
发生了一个错误
>>>a#a仍然存在
1.
>>>b#b也是
2.
>>>只有c是未定义的
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
NameError:未定义名称“c”
>>>

设计用于在引发异常之前正常执行try块中的代码。发生这种情况时,try块将立即退出。这意味着只有引发异常的行之后的代码才会被忽略。

是的,这是完全可能的。下面是一个演示:

>>> try:
...     a = 1
...     b = 2
...     c = 1/0 # This will raise a ZeroDivisionError
... except ZeroDivisionError:
...     print 'an error occurred'
...
an error occurred
>>> a  # a still exists
1
>>> b  # so does b
2
>>> c  # only c is undefined
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'c' is not defined
>>>
>>试试:
...     a=1
...     b=2
...     c=1/0#这将产生零分错误
... 除零误差外:
...     打印“发生错误”
...
发生了一个错误
>>>a#a仍然存在
1.
>>>b#b也是
2.
>>>只有c是未定义的
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
NameError:未定义名称“c”
>>>

设计用于在引发异常之前正常执行try块中的代码。发生这种情况时,try块将立即退出。这意味着只有引发异常的行之后的代码才会被忽略。

是的,这是完全可能的。下面是一个演示:

>>> try:
...     a = 1
...     b = 2
...     c = 1/0 # This will raise a ZeroDivisionError
... except ZeroDivisionError:
...     print 'an error occurred'
...
an error occurred
>>> a  # a still exists
1
>>> b  # so does b
2
>>> c  # only c is undefined
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'c' is not defined
>>>
>>试试:
...     a=1
...     b=2
...     c=1/0#这将产生零分错误
... 除零误差外:
...     打印“发生错误”
...
发生了一个错误
>>>a#a仍然存在
1.
>>>b#b也是
2.
>>>只有c是未定义的
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
NameError:未定义名称“c”
>>>

设计用于在引发异常之前正常执行try块中的代码。发生这种情况时,try块将立即退出。这意味着只有引发异常的行之后的代码才会被忽略。

如果我理解正确,默认情况下会发生这种情况。引发异常并不会神奇地撤消try块中已经发生的一切。在您的示例中,如果分配
e
时发生错误,
a
c
仍将具有分配的值

try:
    a = b
    c = d
    e = f # oh noes! error! Try block skips to the end!
except: pass

print (a) #but a and c are still there
print (c)

如果我理解正确,这将默认发生。引发异常并不会神奇地撤消try块中已经发生的一切。在您的示例中,如果分配
e
时发生错误,
a
c
仍将具有分配的值

try:
    a = b
    c = d
    e = f # oh noes! error! Try block skips to the end!
except: pass

print (a) #but a and c are still there
print (c)

如果我理解正确,这将默认发生。引发异常并不会神奇地撤消try块中已经发生的一切。在您的示例中,如果分配
e
时发生错误,
a
c
仍将具有分配的值

try:
    a = b
    c = d
    e = f # oh noes! error! Try block skips to the end!
except: pass

print (a) #but a and c are still there
print (c)

如果我理解正确,这将默认发生。引发异常并不会神奇地撤消try块中已经发生的一切。在您的示例中,如果分配
e
时发生错误,
a
c
仍将具有分配的值

try:
    a = b
    c = d
    e = f # oh noes! error! Try block skips to the end!
except: pass

print (a) #but a and c are still there
print (c)

这是一种直截了当的方法,没有太多麻烦。当您无法预测可能发生的错误类型或多个错误时,这是最好的解决方法

try :
    a=10
except :
    print "bla A"
try :
    b=20
except:
    print "bla B"
try:
    c=d
except :
    print "bla C"

这是一种直截了当的方法,没有太多麻烦。当您无法预测可能发生的错误类型或多个错误时,这是最好的解决方法

try :
    a=10
except :
    print "bla A"
try :
    b=20
except:
    print "bla B"
try:
    c=d
except :
    print "bla C"

这是一种直截了当的方法,没有太多麻烦。当您无法预测可能发生的错误类型或多个错误时,这是最好的解决方法

try :
    a=10
except :
    print "bla A"
try :
    b=20
except:
    print "bla B"
try:
    c=d
except :
    print "bla C"

这是一种直截了当的方法,没有太多麻烦。当您无法预测可能发生的错误类型或多个错误时,这是最好的解决方法

try :
    a=10
except :
    print "bla A"
try :
    b=20
except:
    print "bla B"
try:
    c=d
except :
    print "bla C"

最好是限制
try
块中表达式的数量。