Python ';提高';内部';试试',何时以及如何使用';提高?
下面是代码:Python ';提高';内部';试试',何时以及如何使用';提高?,python,Python,下面是代码: def fancy_divide(list_of_numbers, index): try: try: raise Exception("0") finally: denom = list_of_numbers[index] for i in range(len(list_of_numbers)): l ist_of_numbers[i] /
def fancy_divide(list_of_numbers, index):
try:
try:
raise Exception("0")
finally:
denom = list_of_numbers[index]
for i in range(len(list_of_numbers)):
l ist_of_numbers[i] /= denom
except Exception as ex:
print(ex)
如果我打电话:
fancy_divide([0, 2, 4], 0)
为什么不打印“0”
如果我像这样编辑代码:
def fancy_divide(list_of_numbers, index):
try:
try:
raise Exception("0")
finally:
denom = list_of_numbers[index]
for i in range(len(list_of_numbers)):
list_of_numbers[i] /= denom
except Exception as ex:
raise Exception("0")
print(ex)
然后调用相同的东西,它打印:
Traceback (most recent call last):
File "<ipython-input-16-c1b0ac98281c>", line 1, in <module>
fancy_divide([0, 2, 4], 0)
File "/Users/dsn/.spyder-py3/temp.py", line 10, in fancy_divide
raise Exception("0")
Exception: 0
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
花式除法([0,2,4],0)
文件“/Users/dsn/.spyder-py3/temp.py”,第10行,花式分割
引发异常(“0”)
例外情况:0
为什么呢?什么是使用raise的正确方法/什么时候应该使用raise?您的
最后
块本身会引发一个异常,一个被零除的错误(因为您的分母是0)。如果当异常冒泡时执行finally
块,并引发其自身的异常,则它:
打印
)
我建议多了解一些;您的示例代码是如此的做作/毫无意义,以至于无法说出您真正的误解是什么,也无法说明什么只是为了说明支持您的问题的特定行为。您的
最后
块本身引发了一个异常,一个被零除的错误(因为您的分母是0)。如果当异常冒泡时执行finally
块,并引发其自身的异常,则它:
def fancy_divide(list_of_numbers, index):
try:
try:
raise Exception("0") # 1
finally:
denom = list_of_numbers[index]
for i in range(len(list_of_numbers)):
list_of_numbers[i] /= denom
except Exception as ex:
print(ex) # 2
打印
)
我建议多了解一些;你的示例代码是如此的做作/毫无意义,以至于你不可能说出你真正的误解是什么,也不可能仅仅说明支持你的问题的特定行为
def fancy_divide(list_of_numbers, index):
try:
try:
raise Exception("0") # 1
finally:
denom = list_of_numbers[index]
for i in range(len(list_of_numbers)):
list_of_numbers[i] /= denom
except Exception as ex:
print(ex) # 2
注意数字
1.这个东西首先执行,触发第二个try
之外的块,忽略其他块
2.这将被触发,因为try
块中存在异常
在块内使用raise,但
块除外,以避免复杂的事情
我会将您的代码改写为:
def fancy_divide(list_of_numbers, index):
try:
# Your fancy divide logic here
except Exception as ex:
raise Exception('Something went wrong: {exception}'.format(exception=ex))
finally:
# Don't need to
注意数字
1.这个东西首先执行,触发第二个try
之外的块,忽略其他块
2.这将被触发,因为try
块中存在异常
在块内使用raise,但
块除外,以避免复杂的事情
我会将您的代码改写为:
def fancy_divide(list_of_numbers, index):
try:
# Your fancy divide logic here
except Exception as ex:
raise Exception('Something went wrong: {exception}'.format(exception=ex))
finally:
# Don't need to
你的期末考试还有一个例外。您希望它做什么?最后运行块,引发ZeroDivisionError
,捕获并打印。你想干什么?也许还有更好的办法。你的最后一个例外。您希望它做什么?最后运行块,引发ZeroDivisionError
,捕获并打印。你想干什么?也许有更好的办法。