Python Forum
Invalid syntax, but not showing what it is!?! - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: Invalid syntax, but not showing what it is!?! (/thread-4361.html)



Invalid syntax, but not showing what it is!?! - WillHampGuy - Aug-10-2017

Hi guys, I've got a problem ?

I've put some code into idle 3, and it's saying 'syntax error' when I run it, but it isn't showing me where the error is! If I can, I'll post a photo.
I've just re downloaded noobs onto my pi so we're all up to date. The code is for a GPIO intruder alarm circuit.
(Btw I'm not totally sure if some of the code is right, so please correct me if it's wrong!)

Thanks in advance!

Turns out I can't post a pic ( I probably just don't know how) so hopefully I will go on my computer and edit it in now ?


RE: Invalid syntax, but not showing what it is!?! - ichabod801 - Aug-10-2017

You have not given us enough information to help you. Please copy and paste the full text that is telling you that there is a syntax error.


RE: Invalid syntax, but not showing what it is!?! - WillHampGuy - Aug-10-2017

It won't let me edit the original text so here it is:
import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BOARD)
GPIO.setup(7,GPIO.IN)

if GPIO.input(7)==True:
    print ("Secure")

elif: GPIO.input(7)==False
    print ("Intruder alert")
If it doesn't show up, there is a tab indent on the first 'print' and the 'elif' and a double tab before the second 'print'


RE: Invalid syntax, but not showing what it is!?! - nilamo - Aug-10-2017

(Aug-10-2017, 08:53 PM)WillHampGuy Wrote: elif: GPIO.input(7)==False
elif: is invalid, since there's no condition.  The easy answer is: move the colon to the end of the line.


RE: Invalid syntax, but not showing what it is!?! - WillHampGuy - Aug-10-2017

Thanks!

And that would fix all the errors?


RE: Invalid syntax, but not showing what it is!?! - nilamo - Aug-10-2017

All obvious syntax errors, yes.  Perhaps not logic errors.


RE: Invalid syntax, but not showing what it is!?! - WillHampGuy - Aug-10-2017

Now it's showing a syntax error with the 'elif' highlighted. ??


RE: Invalid syntax, but not showing what it is!?! - DeaD_EyE - Aug-10-2017

if condition:
    # code for this case
elif condition:
    # code for this case
else:
    # code if no case is True
In your case you have the colon at the wrong position.
A condition could be everything which can return a bool

A condition for your if/elif statement can be GPIO.input(7).
You can do also the equality check GPIO.input(7) == True which returns also a boolean.

If I guess, GPIO.input(7) should return an integer object. An integer object with the value 0 it False. If it has the value 1, it's True. 1 == 1.0 == True and 0 == 0.0 == False.

Your fixed code:

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BOARD)
GPIO.setup(7,GPIO.IN)

if GPIO.input(7)==True:
    print ("Secure")
elif GPIO.input(7)==False:
    print ("Intruder alert")
Or easier:

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BOARD)
GPIO.setup(7,GPIO.IN)

if GPIO.input(7):
    print ("Secure")
else:
    print ("Intruder alert")
We know that GPIO.input only returns 1 or 0.
There is no third case.

Little hint: If you want to check if an object is a boolean, just check it with bool(your_object). If the object has the special method __bool__, it returns True or False. Then you can use this object in an if/elif statement.


RE: Invalid syntax, but not showing what it is!?! - WillHampGuy - Aug-11-2017

Thanks, but it's still giving me a syntax error!!?? And also can you explain to me how to use a bool please? I tried bool(GPIO.input(7)) btw. It's been a while since I did this!


RE: Invalid syntax, but not showing what it is!?! - sparkz_alot - Aug-11-2017

You need to post your corrected code, plus the error code in it's entirety, all between the proper code tags. As to bool, DeaD_EyE went into great detail on what it is and how it is used. You might take the time to read the post, if you still have a question, be specific about which part you do not understand.

According to your first post, if you explained it correctly, your code looked like this:

import RPi.GPIO as GPIO
import time
 
GPIO.setmode(GPIO.BOARD)
GPIO.setup(7,GPIO.IN)
 
if GPIO.input(7)==True:
    print ("Secure")
 
    elif: GPIO.input(7)==False
        print ("Intruder alert")
if that is true, than your "elif" is wrong, it should line up with the "if" and the second "print" should line up with the first.