[Python] Zelfbouw script fout

Pagina: 1
Acties:

Vraag


Acties:
  • +1 Henk 'm!

  • dennisdew16
  • Registratie: Augustus 2010
  • Niet online
Ik probeer een script geschreven in de taal qml om te schrijven naar python zodat ik het uiteindelijk in bijvoorbeeld domoticz kan gebruiken. Hierbij moet ik zeggen dat ik vooral door trail &error probeer het script te laten werken en wat ik niet snap zoek ik op het internet op. Het volgende heb ik nu.
code:
1
2
3
4
5
6
7
8
9
10
11
12
import json

with open('/tmp/postnl/POSTNL-Inbox.json') as json_file:
    postNLData = json.load(json_file)
    if (postNLData['receiver'][0]['delivery']['status'] != 'Delivered'): {
        print (postNLData['receiver'][0]['delivery']['status']) 
    }   
    else {
        if (postNLData['receiver'][0]['delivery']['status'] == 'Delivered'): {
            print ('test')  
        }
    }

Dit is puur om te testen hoe het script werk. Het is de bedoeling dat er gekeken wordt of er een pakket onderweg is, zo niet print 'test', of dat er een waarde wordt geschreven(x = 1 bijvoorbeeld). Het gedeelte tot print status werkt goed, alleen als ik er dan het else gedeelte onder zet verschijnt er invalid syntax: else{

Iemand die mij op weg kan helpen wat er hier fout gaat? En hoe ik dit in het vervolg kan aanpakken?

Alle reacties


Acties:
  • +1 Henk 'm!

  • Merethil
  • Registratie: December 2008
  • Laatst online: 11:45
Python gebruikt indentatie voor de flow van code, niet accolades. Haal de accolades eens weg, dan merk je dat dié syntax-errors in ieder geval verdwijnen.

De rest van de code kan ik niets over zeggen, maar het lijkt me een begin.

Acties:
  • +1 Henk 'm!

  • DonJunior
  • Registratie: Februari 2008
  • Laatst online: 11:18
Zoals @Merethil al aangeeft.. Python gebruikt indentation en geen accolades
Zie ook https://www.w3schools.com/python/python_conditions.asp


Overigens is je else constructie ook vreemd.. je hoeft daarin niet die if check nog te doen want die doe je in de eerste if al.
Else en dan print('test') is voldoende

[ Voor 42% gewijzigd door DonJunior op 13-05-2020 15:38 ]

*sowieso


Acties:
  • 0 Henk 'm!

  • dennisdew16
  • Registratie: Augustus 2010
  • Niet online
Bedankt voor de info tot nu toe.
Heb het een en ander aangepast maar dezelfde fout blijft erin staan.
code:
1
2
3
4
5
6
7
8
import json

with open('/tmp/postnl/POSTNL-Inbox.json') as json_file:
    postNLData = json.load(json_file)
    if (postNLData['receiver'][0]['delivery']['status'] != 'Delivered'):
        print (postNLData['receiver'][0]['delivery']['status']) 
    else
        print('test')

Acties:
  • 0 Henk 'm!

  • DonJunior
  • Registratie: Februari 2008
  • Laatst online: 11:18
Dat is al een stuk beter
Achter 'else' moet je nog even een dubbele punt plaatsen

code:
1
2
else:
     print('test')

*sowieso


Acties:
  • 0 Henk 'm!

  • dennisdew16
  • Registratie: Augustus 2010
  • Niet online
DonJunior schreef op woensdag 13 mei 2020 @ 15:46:
Dat is al een stuk beter
Achter 'else' moet je nog even een dubbele punt plaatsen

code:
1
2
else:
     print('test')
Bedankt! Was er zelf ook net achter na het lezen van de link de je stuurde :) Voor nu kan ik weer even verder. Zal vanavond ongetwijfeld nog weer een vraag hebben.

Acties:
  • +1 Henk 'm!

  • mcDavid
  • Registratie: April 2008
  • Laatst online: 10:28
Watvoor IDE gebruik je? In principe zou die wel duidelijk moeten waarschuwen voor dit soort basale syntax errors.

Acties:
  • 0 Henk 'm!

  • dennisdew16
  • Registratie: Augustus 2010
  • Niet online
mcDavid schreef op woensdag 13 mei 2020 @ 15:52:
Watvoor IDE gebruik je? In principe zou die wel duidelijk moeten waarschuwen voor dit soort basale syntax errors.
Dat is misschien wel m'n fout. Ik schrijf het in notepad++ en test het op m'n Raspberry. Totaal niet aan een andere ide gedacht. Tips over een goeie IDE?

Acties:
  • +2 Henk 'm!

Anoniem: 882605

dennisdew16 schreef op woensdag 13 mei 2020 @ 16:51:
[...]

Dat is misschien wel m'n fout. Ik schrijf het in notepad++ en test het op m'n Raspberry. Totaal niet aan een andere ide gedacht. Tips over een goeie IDE?
pycharm

Acties:
  • +1 Henk 'm!

  • L01
  • Registratie: December 2003
  • Laatst online: 04-07 11:07

L01

Ik gebruik zelf altijd Visual Studio Code met de Python extension.

Maar iedereen heeft zijn eigen voorkeur voor IDE. Probeer er een paar!

Hi, I'm a signature virus. Put me in your signature to help me spread.


Acties:
  • +1 Henk 'm!

  • mcDavid
  • Registratie: April 2008
  • Laatst online: 10:28
Op zich zou Notepad++ ook wel goeie syntax highlighting moeten hebben lijkt me? Evt met een plugin?

Maar PyCharm is idd wel een aanrader. Al kan het komen dat ik het fijn vind omdat ik voor mijn werk de hele dag met mijn neus in PHPStorm zit.

Acties:
  • 0 Henk 'm!

  • dennisdew16
  • Registratie: Augustus 2010
  • Niet online
@Anoniem: 882605, @mcDavid ik gebruik nu pycharm en er gaat een wereld voor me open, hartelijk dank!

Acties:
  • 0 Henk 'm!

Anoniem: 882605

dennisdew16 schreef op woensdag 13 mei 2020 @ 19:43:
@Anoniem: 882605, @mcDavid ik gebruik nu pycharm en er gaat een wereld voor me open, hartelijk dank!
Dat werkt wat makkelijker he :P

Niet meer print() als debug gebruiken maar leer werken met de debugger!

Acties:
  • 0 Henk 'm!

  • dennisdew16
  • Registratie: Augustus 2010
  • Niet online
Ben ik weer met een nieuwe vraag...
Ik zit met de lengte van een string, zeg dat die 5 is.
Nu wil ik dat een variabele, bijvoorbeeld i, de waarde 1 tot en met de lengte van de string geeft(1t/m5). En als de lengte veranderd naar 8 dat dan ook de variable mee veranderd van 1 t/m 8.

Dit keer heb ik zelf wat meer onderzoek gedaan maar kom er zo even niet uit.. Hoop dat iemand me hier mee kan helpen.

Acties:
  • 0 Henk 'm!

  • pl0xs
  • Registratie: Maart 2014
  • Laatst online: 12-06 10:47
Heb je al gekeken naar range() en len()?

range() returnt overigens een lijst.

Acties:
  • 0 Henk 'm!

  • dennisdew16
  • Registratie: Augustus 2010
  • Niet online
pl0xs schreef op woensdag 13 mei 2020 @ 23:53:
Heb je al gekeken naar range() en len()?

range() returnt overigens een lijst.
len() was ik al mee bezig inderdaad, nu ik ook range() gebruik kom ik al een eind maar nog niet precies wat ik wil. Ik ga er in ieder geval even mee aan de slag!

Acties:
  • 0 Henk 'm!

  • dennisdew16
  • Registratie: Augustus 2010
  • Niet online
Ik heb nu het volgende
code:
1
2
3
4
 for i in range(len(postNLData['receiver'])):
        if postNLData['receiver'][i]['delivery']['status'] == 'Delivered':
            shipmentDate = postNLData['receiver'][i]['delivery']['deliveryDate'][0:10]
            shipmentTitle = "Ontvangen van "

Ik had gehoopt dat deze regels code herhaalt zou worden met de waarden 0 t/m 8, echter wordt deze maar 1 keer uitgevoerd met de laatse waarde, 8 in dit geval.
Moet ik nu van het hele spul een functie maken met def() en zodoende elke keer een ander nummer voor i aanroepen of is hier een andere manier voor?

Acties:
  • +1 Henk 'm!

  • Rannasha
  • Registratie: Januari 2002
  • Laatst online: 04-07 23:42

Rannasha

Does not compute.

dennisdew16 schreef op donderdag 14 mei 2020 @ 14:43:
Ik heb nu het volgende
code:
1
2
3
4
 for i in range(len(postNLData['receiver'])):
        if postNLData['receiver'][i]['delivery']['status'] == 'Delivered':
            shipmentDate = postNLData['receiver'][i]['delivery']['deliveryDate'][0:10]
            shipmentTitle = "Ontvangen van "

Ik had gehoopt dat deze regels code herhaalt zou worden met de waarden 0 t/m 8, echter wordt deze maar 1 keer uitgevoerd met de laatse waarde, 8 in dit geval.
Moet ik nu van het hele spul een functie maken met def() en zodoende elke keer een ander nummer voor i aanroepen of is hier een andere manier voor?
In de lus worden de variabelen shipmentDate en shipmentTitle elke keer overschreven. Je zult bij iedere iteratie van de lus de uitkomst ergens anders moeten opslaan, want anders blijft inderdaad enkel de allerlaatste waarde over nadat de lus volledig afgewerkt is.

Zoek eens op het opslaan van waardes in een array. Daarmee moet je verder kunnen komen.

|| Vierkant voor Wiskunde ||

Pagina: 1