Python返回无效语法错误

Python返回无效语法错误,python,python-3.x,raspberry-pi,Python,Python 3.x,Raspberry Pi,我正在用raspberry pi编写一个简单的python程序,我对python编程非常陌生。我已经定义了一个名为GetMessage的函数,它没有参数,返回一个我称之为data的变量,但是我得到一个错误 文件“Raspberry_pi.py”,第39行 一无所获 ^ SyntaxError:无效语法 SyntaxError:无效语法 代码中存在许多语法问题。由于SyntaxError异常的性质(当解释器不理解代码语法时会引发异常),错误消息可能无法将正确的行识别为问题的根源 我看到的

我正在用raspberry pi编写一个简单的python程序,我对python编程非常陌生。我已经定义了一个名为GetMessage的函数,它没有参数,返回一个我称之为data的变量,但是我得到一个错误

文件“Raspberry_pi.py”,第39行

一无所获

    ^
SyntaxError:无效语法

SyntaxError:无效语法


代码中存在许多语法问题。由于
SyntaxError
异常的性质(当解释器不理解代码语法时会引发异常),错误消息可能无法将正确的行识别为问题的根源

我看到的第一个语法错误是,您在
GetMessage
函数中使用
break
,而不在循环中。
break
语句仅在
for
while
块中有用,而在其他地方使用一个语句(在本例中,在
块除外的
中)是语法错误

下一组错误与缺少冒号有关。
DecodeInput
SetPower
中的每个条件分支都需要在条件后面加一个冒号:
如果条件1:
elif条件2:
其他:

使用
else if
而不是
elif
也是一个错误(如果在
else:
之后添加冒号、换行符和额外的缩进级别,然后使用单独的
if
语句,则可以使其工作,但这会浪费空间)

还有一些附加问题,但它们不是语法错误。例如,在定义函数之前,您正在从顶级代码调用函数,
DecodeInput
有一行带裸表达式的
SetPower
,它没有做任何有用的事情(您可能希望通过一些参数调用
SetPower


希望这将使您走上正确的道路。

一旦修复冒号,您可能会遇到
GetMessage
语法问题。除非处于循环中,否则不能
中断
。如果要从异常返回,则不需要调用
pass
。此方法可能(应该?)的外观示例(从代码中简化):


显然,您需要用自己的代码替换大部分方法,并确定是否真的希望在放置
中断
s的点处从函数返回

张贴整个文件。第39行在哪里?并修复您的缩进第39行是“返回数据”@Root0x您的错误消息会显示其他内容。请在未修改的情况下发布整个文件,并按照Michael的建议修复缩进。如果我修复代码缩进,我会在不同的位置出现语法错误,因为
If
语句末尾缺少冒号。如果
if
行(应该是
elif
,并且在行的末尾有一个冒号)和
else
(只需要一个冒号),您也会从中得到错误<代码>设置PitchPower
本身在一行上可能不会导致异常,但可能不会执行您想要的操作。
import os
import glob
import time
import RPi.GPIO as GPIO
from math import *
from bluetooth import *
from RPIO import PWM

os.system('sudo hciconfig hci0 pisca')
os.system('sudo hciconfig hci0 name "De Quadcoptur"')
servo = PWM.Servo()
StartSpin()

server_sock=BluetoothSocket( RFCOMM )
server_sock.bind(("",PORT_ANY))
server_sock.listen(1)

port = server_sock.getsockname()[1]

GetMessage()
DecodeInput()

uuid = "94f39d29-7d6d-437d-973b-fba39e49d4ee"
def GetMessage():
    advertise_service( server_sock, "XT1032", #phone bluetooth name
        service_id = uuid,
        service_classes = [ uuid, SERIAL_PORT_CLASS ],
        profiles = [ SERIAL_PORT_PROFILE ],
        #protocols = [ OBEX_UUID ]
        )
    client_sock, client_info = server_sock.accept()

    try:
            data = client_sock.recv(1024)
            if len(data) == 0: break
            print "received [%s]" % data
            client_sock.close()
            server_sock.close()
    except IOError:
        pass

        break
    return data


def StartSpin():
    # Set servo on GPIO17 to 1200µs (1.2ms)
    servo.set_servo(17, 1000)
    servo.set_servo(18, 1000)
    servo.set_servo(19, 1000)
    servo.set_servo(20, 1000)
    time.sleep(1)
    servo.stop_servo(17)
    servo.stop_servo(18)
    servo.stop_servo(19)
    servo.stop_servo(20)
    #Check if more pulses is faster
    time.sleep(2000)
    PWM.add_channel_pulse(0, 17, start = 1000, width = 100)
    PWM.add_channel_pulse(0, 17, start = 1000, width = 100)
    PWM.add_channel_pulse(0, 17, start = 1000, width = 100)
    PWM.add_channel_pulse(0, 17, start = 1000, width = 100)
    PWM.add_channel_pulse(0, 17, start = 1000, width = 100)
    servo.stop_servo(17)
    servo.stop_servo(18)
    servo.stop_servo(19)
    servo.stop_servo(20)
    return None

def DecodeInput():
    data = GetMessage()
    if(data == 'start')
        StartSpin()
        return 0
    else if(data[0] == 'U')
        data.strip('U')
        UpPower = int(data)
        SetUpPower(UpPower)
    else if(data[0] == 'P')
        data.strip('P')
        PitchPower = int(data)
        SetPitchPower
    else
        data.strip('P')
        RollPower = int(data)
    SetPower(UpPower, PitchPower, RollPower)
    return None

def SetPower(UpPower, PitchPower, RollPower):
    #Make Arbitrary Values
    Motor1Power = UpPower #Front Left
    Motor2Power = UpPower #Front Right
    Motor3Power = UpPower #Back  Left
    Motor4Power = UpPower #Back  Right
    PitchPower = PitchPower /2
    RollPower = RollPower /2
    if(PitchPower < 25)
        Motor1Power = Motor1Power + abs(25-PitchPower)
        Motor2Power = Motor1Power + abs(25-PitchPower)
    else
        Motor3Power = Motor3Power + (PitchPower-25)
        Motor4Power = Motor4Power + (PitchPower-25)
    if(RollPower < 25)
        Motor1Power = Motor1Power + abs(25-RollPower)
        Motor3Power = Motor3Power + abs(25-RollPower)
    else
        Motor2Power = Motor2Power + (RollPower - 25)
        Motor4Power = Motor4Power + (RollPower - 25)
    ^
def GetMessage():
    data = None

    try:
        data = [1,2]
        if len(data) == 0: 
            return None
    except IOError:
        return None

    return data