super() 在 Sublime Text 中抛出错误,在 PyCharm/Terminal 中有效

Posted

技术标签:

【中文标题】super() 在 Sublime Text 中抛出错误,在 PyCharm/Terminal 中有效【英文标题】:super() throwing an error in Sublime Text, works in PyCharm/Terminal 【发布时间】:2017-08-06 17:53:11 【问题描述】:

我已生成以下代码作为作业的一部分。

class Question:
    """Base class for all questions"""

    question_count = 0

    def __init__(self, desc):
        self.desc = desc

        Question.question_count += 1


class MarkovMM(Question):
    def __init__(self, desc, arrival, service):
        super().__init__(desc)
        if self.desc == "Question 2":
            self.answer = round(1 - (1 - (arrival / service)) - ((1 - (arrival / service)) * (arrival / service)), 3)
        elif self.desc == "Question 3":
            self.answer = round(1 / ((service / 60) - (arrival / 60)), 4)

qu2 = MarkovMM("Question 2", 5, 23)
print(qu2.answer)
qu3 = MarkovMM("Question 3", 6, 22)
print(qu3.answer)

当我通过 PyCharm 和 Ubuntu 终端运行它时,它工作得很好。但是,在 Sublime Text 中运行它会产生以下错误。

Traceback (most recent call last):
  File "/home/estilen/Dropbox/College/Year_3/CSA2/Python/hello.py", line 20, in <module>
    qu2 = MarkovMM("Question 2", 5, 23)
  File "/home/estilen/Dropbox/College/Year_3/CSA2/Python/hello.py", line 14, in __init__
    super().__init__(desc)
TypeError: super() takes at least 1 argument (0 given)

为什么在 Sublime 中会出现错误,而在 PyCharm 或 Terminal 中却没有?

期望的输出:

0.047
3.75

【问题讨论】:

因为您的Sublime 可能指向 Python3 版本,而终端和 PyCharm 正在调用 Python2。 @Abdou 我的意思是使用 Python 3。 似乎 Sublime 已经指向 Python3,如果代码段在那里运行没有任何问题。也许 PyCharm 和您的终端可能需要在这里进行设置。 @Abdou wim 的解决方案解决了我的问题。 Sublime 实际上是指向 Python2 并且是 Sublime 抛出错误,而不是 PyCharm/Terminal。不管怎样,谢谢你。 :) 【参考方案1】:

您的 sublimetext 使用默认构建系统,即 Python 2。将其配置为在 Python 3 中运行。

Tools -&gt; Build System -&gt; New Build System ...

添加此内容:


    "cmd": ["python3", "-u", "$file"],
    "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
    "selector": "source.python"

用合理的文件名保存配置,比如python3.sublime-build,然后在Tools -&gt; Build With ... 中选择这个新创建的构建。

【讨论】:

像魅力一样工作!谢谢你,先生。另外,再问一个问题,如果错误是由于 Python 版本不同而引发的,那么 Python 2 和 Python 3 中的 super() 之间的核心区别是什么? 原来调用super时必须指定类型。在 Python 3 中,他们添加了一些 black magic 来删除这个样板。本着对 Python 2 的热爱,没有人会费心向后移植那个语法糖,所以如果你使用的是 Python 2,你仍然必须使用糟糕的旧版本。

以上是关于super() 在 Sublime Text 中抛出错误,在 PyCharm/Terminal 中有效的主要内容,如果未能解决你的问题,请参考以下文章

sublime text 3sublime text 3 汉化

Sublime Text 3编译Sass - Sublime Text安装Sass插件

ubuntu sublime text3 python 配置 sublime text3 python 配置

text 从命令行启动Sublime Text(在OSX上)

sublime text 3配置使用python

sublime快捷键设置