2017-03-15 26 views
2

我已經將下面的代碼作爲賦值的一部分。super()在Sublime Text中拋出一個錯誤,在PyCharm/Terminal中工作

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 
+3

因爲你的'Sublime'可能指向一個Python3版本,而終端和PyCharm正在調用Python2。 – Abdou

+0

@Abdou我的意思是使用Python 3. –

+0

好像Sublime已經指向Python3,如果代碼片段在那裏運行沒有任何問題。也許PyCharm和你的終端可能需要這裏的設置。 – Abdou

回答

6

你sublimetext使用默認的編譯系統,這是Python的2.配置能在Python運行3

Tools -> Build System -> New Build System ...

添加這些內容:

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

用合理的fi保存配置例如python3.sublime-build,並在Tools -> Build With ...中選擇這個新創建的版本。

+0

工程就像一個魅力!謝謝你,先生。另外,爲了解決另一個問題,如果錯誤是由於Python版本的不同而引發的,Python 2和Python 3中的super()之間的核心區別是什麼? –

+1

最初,您必須在調用super時指定類型。在Python 3中,他們添加了一些[黑魔法](http://stackoverflow.com/q/36993577/674039)來移除這個樣板。本着對Python 2的強烈愛好的精神,沒有人會反過來支持這種語法糖,所以如果你使用Python 2,你仍然必須使用糟糕的舊版本。 – wim

+0

@wim:https:// stackoverflow中有一個註釋。 com/documentation/python/419/classes/1399/basic-inheritance#t = 201703160319593873367可以擴展。 – Ryan

相關問題