找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 3223|回复: 5

[代码与实例] RuntimeError: maximum recursion depth exceeded

11

主题

26

帖子

26

积分

贫民

积分
26
jingseyi2011 发表于 2017-12-14 17:32:45 | 显示全部楼层 |阅读模式
请教,在Python2.7中,有一行代码一直无限运行:
并报错:
RuntimeError: maximum recursion depth exceeded,
是跟Python版本有关吗?
回复

使用道具 举报

3

主题

278

帖子

278

积分

侠客

积分
278

热心会员

uitb 发表于 2017-12-14 18:37:26 | 显示全部楼层
与python版本无关,你的递归函数没有回归,达到了默认最大递归深度,可以加一句代码改的,建议检查下是否需要这么深的递归深度,或者干脆你的代码根本不会回归收敛
  1. import sys
  2. sys.setrecursionlimit(depth)
  3. # depth为设定的递归深度
复制代码
回复 支持 反对

使用道具 举报

11

主题

26

帖子

26

积分

贫民

积分
26
jingseyi2011  楼主| 发表于 2017-12-15 11:26:27 | 显示全部楼层
uitb 发表于 2017-12-14 18:37
与python版本无关,你的递归函数没有回归,达到了默认最大递归深度,可以加一句代码改的,建议检查下是否需 ...

谢谢,还有个办法,今天发现可以把变量设置成私有属性,即使不设置递归深度,也可以run过。
回复 支持 反对

使用道具 举报

11

主题

26

帖子

26

积分

贫民

积分
26
jingseyi2011  楼主| 发表于 2017-12-15 11:29:27 | 显示全部楼层
但是,今天有个新的问题:
比如下面这段代码:
#!user/bin/python
# -*- coding: UTF-8 -*-
#import sys
#sys.setrecursionlimit(10000)
class dice(object):
    def __init__(self):
        self._color = 1 #设置成私有属性
    @staticmethod
    def sum_number(sum):
        return color+1
    @classmethod
    def gen_dice(cls,color):
        return cls(color,cls.sum_number(color))
    @property
    def color(self):
        return self._color
   
    @color.setter
    def color(self,color):
        if 0 < color < 7:
            self._color = color
        else:
            print("set failure!")
            
    def set_color(self,color): #定义方法set_color
        print('color:',color)
        self.color = color
   

if __name__ == '__main__':
    d = dice()
    d.color = 7
    print d.color
    d.color = 5
    print d.color
    print(d.sum_number)

执行后的结果为:
set failure!
1
5
<function sum_number at 0x028DF030>

为什么sum_number这个静态方法没有按照预期的生效?
回复 支持 反对

使用道具 举报

2

主题

219

帖子

219

积分

版主

Rank: 7Rank: 7Rank: 7

积分
219

热心会员默默耕耘优秀版主

剑心无痕 发表于 2017-12-15 13:37:20 | 显示全部楼层
jingseyi2011 发表于 2017-12-15 11:29
但是,今天有个新的问题:
比如下面这段代码:
#!user/bin/python

@staticmethod
def sum_number(sum):
    return color+1
没看懂你要做什么,staticmethod是全局函数,里面的color没有定义,就算调用了也会报错
print(d.sum_number) 打印的是这个函数,print(d.sum_number(args)) 才是调用这个函数获取返回值
回复 支持 反对

使用道具 举报

11

主题

26

帖子

26

积分

贫民

积分
26
jingseyi2011  楼主| 发表于 2017-12-15 15:35:13 | 显示全部楼层
本帖最后由 jingseyi2011 于 2017-12-15 15:37 编辑
剑心无痕 发表于 2017-12-15 13:37
@staticmethod
def sum_number(sum):
    return color+1

谢谢,在静态方法中定义了sum_number(sum,color),然后输出语句改为:print(d.sum_number(6,5)),就可以了;
原题干是:
定义一个色子:
1.具有6个面,每个面为一种颜色;
2.每种颜色为1个值(1-6)
3.通过颜色计算两种代表数值和的静态方法
4.实现通过一个类方法(gen_dice)用于产生这个类的实例

我也不是很理解题干的意思,所以先试下这个静态方法的定义是否生效
大神如果有兴趣,可以编个程序交流下,再次非常感谢!

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表