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 -> Build System -> New Build System ...
添加此内容:
"cmd": ["python3", "-u", "$file"],
"file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
"selector": "source.python"
用合理的文件名保存配置,比如python3.sublime-build
,然后在Tools -> 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 配置