第十六章:开发工具-pdb:交互式调试工具-改变执行流-非法跳转

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命令改变了调试上下文,那么执行流就不能改变。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值