16.7.4.3 非法跳转
跳入和跳出某些流控制语句会很危险,而且不确定,因此调试工具不允许这些行为。
#!usr/bin/env python3
# encoding: utf-8
#
# Copyright (c) 2019 Iglesias. All rights reserved.
#
def f(n):
if n < 0:
raise ValueError('Invalid n: {}'.format(n))
result = []
j = 0
for i in range(n):
j = i * n + j
j += n
result.append(j)
return result
if __name__ == '__main__':
try:
print(f(5))
finally:
print('Always printed')
try:
print(f(-5))
except:
print('There was an error')
else:
print('There was no error')
print('Last statement')
尽管可以使用jump进入一个函数,但是参数未定义,代码也不能正常工作。
jump不会进入类似for循环或try:except语句等代码块的中间。
finally块中的代码必须全部执行,所以jump不会离开finally块。
最基本的限制是,跳转要受调用栈底帧的约束。如果已经使用up命令改变了调试上下文,那么执行流就不能改变。