Python脚本PyCharm运行正常但命令行执行报错原因及解决方法
问题原因
核心问题是两个运行环境的Python解释器版本不匹配:
- PyCharm里配置的项目解释器是Python 3.x,Python 3中所有类默认都是新式类,支持自定义
__new__方法实现实例构造逻辑,所以脚本可以正常运行。 - Linux终端下输入
python默认调用的是Python 2.x解释器。Python 2的规则里,如果类没有显式继承object,就会被识别为旧式类(经典类),旧式类不支持自定义__new__的构造逻辑,实例化时传入参数就会抛出TypeError: this constructor takes no arguments的报错。直接执行./py.py时报错同理,说明脚本首行没有指定解释器、或者指定的解释器也是Python 2版本。
修复方案
二选一即可:
- 兼容写法:给类显式声明继承
object,让它在Python2环境下也能被识别为新式类,仅修改类定义行即可,其余代码保持不变:class EncodeKey(object): def __new__(cls, *args): if len(args) == 1: return cls.generate_encode_key(args[0].upper()) return cls.get_encode_key(args) - 统一解释器版本:让终端运行时和PyCharm一样使用Python3
- 临时运行时显式指定命令:
python3 py.py - 如果要支持直接
./py.py执行,在脚本的最顶部第一行添加shebang声明:
保存后即可直接执行,系统会自动调用Python3解释器运行脚本,和PyCharm环境保持一致。#!/usr/bin/env python3
- 临时运行时显式指定命令:
内容的提问来源于stack exchange,提问作者curioushuman
相关产品推荐
相关产品推荐

