从C9.io迁移到Codeanywhere后Python脚本super()调用报错
解决
super()调用参数错误的问题 嘿,这个问题我之前也碰到过!核心原因是Python版本差异:你在C9.io用的应该是Python 3,但Codeanywhere默认可能跑的是Python 2,两者对super()的语法要求不一样,这就导致了报错。
问题根源
Python 3里super().__init__()是合法的——解释器会自动帮你推断当前类和实例;但在Python 2中,super()必须显式传入两个参数:当前的类名,还有self。你之前尝试只加self的方式不对,所以报错没解决。
具体修复方法
找到你player.py里BerserkerCharacter类的__init__方法(就是报错的第93行),把super()的调用改成下面这样:
修改前(Python 3专属写法)
def __init__(self, first_name, last_name): super().__init__() # 你的其他初始化代码
修改后(兼容Python 2和3)
def __init__(self, first_name, last_name): super(BerserkerCharacter, self).__init__() # 你的其他初始化代码
这样改完之后,不管是Python 2还是3环境,都能正常调用父类的构造方法了。
顺带解决输出重复的问题
你提到Codeanywhere里输出重复了Strength: 15,这个大概率也是Python版本的小差异导致的(比如打印换行的处理),先把super()的问题解决,这个重复问题应该会跟着消失。如果还存在,再检查下test.py里的调用逻辑,确保没有重复调用show_player_stats的情况。
迁移小提示
从C9.io转去Codeanywhere,记得先确认默认Python版本:
- 在终端敲
python --version,如果显示2.x,要么用python3 test.py来跑脚本,要么修改代码兼容Python 2; - 也可以在Codeanywhere的项目设置里直接把默认Python版本改成3.x,一劳永逸。
内容的提问来源于stack exchange,提问作者The Gaming Hideout
相关产品推荐
相关产品推荐

