在python中定义变量的TypeError

时间:2016-10-09 09:28:28

标签: python typeerror

我试图制作一个音乐播放器,允许将一首歌放入shell中然后播放,我在class Notes():import winsound import time length = 125 class Notes(): def processNote(note): if(note == 'C'):return Notes.processNote(262) if(note == 'D'):return Notes.processNote(294) if(note == 'D5'):return Notes.processNote(587) if(note == 'A'):return Notes.processNote(440) if(note == 'Ab'):return Notes.processNote(415) if(note == 'G'):return Notes.processNote(392) if(note == 'F'):return Notes.processNote(349) if(note == 'B'):return Notes.processNote(247) if(note == 'Bb'):return Notes.processNote(233) song = "CCCCCCCCCCCD" noteList = list(song) print(noteList) for note in noteList: print("Doing ", note) frequency = Notes.processNote(note) winsound.Beep(frequency, length) 中遇到类型错误的问题无法弄清楚原因。

Traceback (most recent call last):
  File "C:\Python\Tester.py", line 27, in <module>
    winsound.Beep(frequency, length)
TypeError: an integer is required (got type NoneType)

错误:

{{1}}

2 个答案:

答案 0 :(得分:1)

如果我可以说些什么,而不是

class Notes():
    def processNote(note):
        if(note == 'C'):return Notes.processNote(262)
        if(note == 'D'):return Notes.processNote(294)
        if(note == 'D5'):return Notes.processNote(587)
        (thousands IFs)

你可以使用python字典并创建映射:

class Notes():
    def processNote(note):
        signature_to_freq = {'C': 262, 'D': 294, 'D5': 587,
                            'B': 247}
        return signature_to_freq[note]

答案 1 :(得分:0)

目前,函数processNote()为任何有效输入返回None,因为您调用它两次而不是仅返回值。查看代码的处理方式可能会有所帮助,以了解发生这种情况的原因:

想象一下,使用音符值processNote()调用"C"。这将与第一个if语句匹配,它将返回调用processNote()的值为262 的结果。由于在processNote()函数中没有if语句捕获262,因此返回None(因为这是Python函数的默认值),因此frequency变量最终为{{1} }。

您可以通过返回文字值来简单地解决这个问题:

None