![](/img/trans.png)
[英]Python 2 pdb: a statement behaves differently when run at the pdb prompt
[英]Why does a python script behaves differently when it is run in pycharm and when it is run from a command prompt?
当我从 Linux 命令提示符(bash)运行脚本时出现错误,但是当我直接在 Pycharm 中运行相同的脚本时,它工作正常。
这是代码:
class EncodeKey:
def __new__(cls, *args):
if len(args) == 1:
return cls.generate_encode_key(args[0].upper())
return cls.get_encode_key(args)
...
...
if __name__ == '__main__':
encode_key = EncodeKey(*["something"])
print(encode_key)
正如我已经说过的,在 Pycharm 中,脚本运行良好,没有任何错误,但这是从命令提示符运行脚本时得到的结果:
user@machine:~/my/path/to/the/script$ python py.py
Traceback (most recent call last):
File "py.py", line 93, in <module>
encode_key = EncodeKey(*["something"])
TypeError: this constructor takes no arguments
或者:
user@machine:~/my/path/to/the/script$ ls -lh
...
-rwxrwxr-x 1 user user 3.2K Jun 20 19:12 py.py
...
user@machine:~/my/path/to/the/script$ ./py.py
Traceback (most recent call last):
File "py.py", line 93, in <module>
encode_key = EncodeKey(*["something"])
TypeError: this constructor takes no arguments
当然,对于这样一个不寻常的问题,我没有找到任何解决方案。 任何想法为什么会发生这种情况? 以及如何解决? 谢谢 !
如果您以默认方式安装了 python,则python
命令使用 Python 2。要与 Python 3 交互,请使用命令python3
:
user@machine:~/my/path/to/the/script$ python3 py.py
Python 2 中的程序错误是因为旧样式类(Python 2 中的默认值)不支持__new__
。 如果您需要支持 Python 2,请通过扩展object
使您的类具有新风格:
class EncodeKey(object):
如果你这样做,你的代码仍然可以在 Python 3 中工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.