怎么解决python maximum recursion depth exceeded while calling a Python object?

怎么解决python maximum recursion depth exceeded while calling a Python object

程序运行到for Pc in filter_pc:
update_phase_and_phys(OP_1.results(Pc=Pc))
这一步堆栈溢出,按网上的操作修改内存容量或是import sys
sys.setrecursionlimit都不管用,想问一下大家怎么解决这个问题的。

    data = OP_1.get_intrusion_data()

    filter_pc = [data.Pcap[0]]
    sat = [data.Snwp[0]]
    for i, pc in enumerate(data.Pcap):
    if  data.Snwp[i] - sat[-1] > 0.05:
        filter_pc.append(pc)
        sat.append(data.Snwp[i])
    filter_pc.append(data.Pcap[-1])
    sat.append(data.Snwp[-1]) 
    def update_phase_and_phys(results):
    water['pore.occupancy'] = results['pore.occupancy']
    air['pore.occupancy'] = 1-results['pore.occupancy']
    water['throat.occupancy'] = results['throat.occupancy']
    air['throat.occupancy'] = 1-results['throat.occupancy']
    # Add multiphase conductances
    mode='strict'
    phys_air.add_model(model=mods.physics.multiphase.conduit_conductance,
                       propname='throat.conduit_diffusive_conductance',
                       throat_conductance='throat.diffusive_conductance',
                       mode=mode)
    phys_water.add_model(model=mods.physics.multiphase.conduit_conductance,
                         propname='throat.conduit_diffusive_conductance',
                         throat_conductance='throat.diffusive_conductance',
                         mode=mode)
    phys_air.add_model(model=mods.physics.multiphase.conduit_conductance,
                       propname='throat.conduit_hydraulic_conductance',
                       throat_conductance='throat.hydraulic_conductance',
                       mode=mode)
    phys_water.add_model(model=mods.physics.multiphase.conduit_conductance,
                         propname='throat.conduit_hydraulic_conductance',
                         throat_conductance='throat.hydraulic_conductance',
                         mode=mode)
    phys_air_b.add_model(model=mods.physics.multiphase.conduit_conductance,
                         propname='throat.conduit_diffusive_conductance',
                         throat_conductance='throat.diffusive_conductance',
                         mode=mode)
    phys_water_b.add_model(model=mods.physics.multiphase.conduit_conductance,
                           propname='throat.conduit_diffusive_conductance',
                           throat_conductance='throat.diffusive_conductance',
                           mode=mode)
    phys_air_b.add_model(model=mods.physics.multiphase.conduit_conductance,
                         propname='throat.conduit_hydraulic_conductance',
                         throat_conductance='throat.hydraulic_conductance',
                         mode=mode)
    phys_water_b.add_model(model=mods.physics.multiphase.conduit_conductance,
                           propname='throat.conduit_hydraulic_conductance',
                           throat_conductance='throat.hydraulic_conductance',
                           mode=mode)

    update_phase_and_phys(OP_1.results(Pc=1e3))
    perm_air = {'0': [], '1': [], '2': []}
    diff_air = {'0': [], '1': [], '2': []}
    perm_water = {'0': [], '1': [], '2': []}
    diff_water = {'0': [], '1': [], '2': []}

    max_Pc = max(OP_1['throat.invasion_pressure'])
    print(max_Pc)
    num_seq = 20
    pore_volumes = sgl['pore.volume']
    throat_volumes = sgl['throat.volume']
    totV = np.sum(pore_volumes) + np.sum(throat_volumes)

    K_air_single_phase = [None, None, None]
    D_air_single_phase = [None, None, None]
    K_water_single_phase = [None, None, None]
    D_water_single_phase = [None, None, None]
    bounds = [['front', 'back'], ['left', 'right'], ['top', 'bottom']]

    for bound_increment in range(len(bounds)):
    # Run Single phase algs effective properties
    BC1_pores = sgl.pores(labels=bounds[bound_increment][0]+'_boundary')
    BC2_pores = sgl.pores(labels=bounds[bound_increment][1]+'_boundary')

    # Effective permeability : air
    sf_air = op.algorithms.StokesFlow(network=sgl, phase=air)
    sf_air.setup(conductance='throat.hydraulic_conductance')
    sf_air.set_value_BC(values=0.6, pores=BC1_pores)
    sf_air.set_value_BC(values=0.2, pores=BC2_pores)
    sf_air.run()
    K_air_single_phase[bound_increment] = sf_air.calc_effective_permeability()
    proj.purge_object(obj=sf_air)

    # Effective diffusivity : air
    fd_air = op.algorithms.FickianDiffusion(network=sgl,phase=air)
    fd_air.setup(conductance='throat.diffusive_conductance')
    fd_air.set_value_BC(values=0.6, pores=BC1_pores)
    fd_air.set_value_BC(values=0.2, pores=BC2_pores)
    fd_air.run()
    D_air_single_phase[bound_increment] = fd_air.calc_effective_diffusivity()
    proj.purge_object(obj=fd_air)

    # Effective permeability : water
    sf_water = op.algorithms.StokesFlow(network=sgl, phase=water)
    sf_water.setup(conductance='throat.hydraulic_conductance')
    sf_water.set_value_BC(values=0.6, pores=BC1_pores)
    sf_water.set_value_BC(values=0.2, pores=BC2_pores)
    sf_water.run()
    K_water_single_phase[bound_increment] = sf_water.calc_effective_permeability()
    proj.purge_object(obj=sf_water)

    # Effective diffusivity : water
    fd_water = op.algorithms.FickianDiffusion(network=sgl,phase=water)
    fd_water.setup(conductance='throat.diffusive_conductance')
    fd_water.set_value_BC(values=0.6, pores=BC1_pores)
    fd_water.set_value_BC(values=0.2, pores=BC2_pores)
    fd_water.run()
    D_water_single_phase[bound_increment] = fd_water.calc_effective_diffusivity()
    proj.purge_object(obj=fd_water)

    for Pc in filter_pc:
    update_phase_and_phys(OP_1.results(Pc=Pc))
    print('-' * 80)
    print('Pc', Pc)

maximum recursion depth exceeded 错误无非2个原因
递归调用的层次太深——将递归改写成循环/堆栈
存在无限递归,也就是自己调用自己,没有正确的结束跳出函数的逻辑——修改代码