Forum >> Principianti >> Variazione sintassi da vers. 3.4 a 3.12

Pagina: 1

Dopo il lungo lavoro di cui a : http://www.python.it/forum/thread/6944/utilizzo-socket/?page=6#post-7078

perfettamente funzionante grazie all'aiuto ricevuto mi ritrovo con un problema di portatilità.




Per comodità di distribuzione il programma è stato "compilato" ed installato su vari PC

Il programma è un terminale da usare in abbinamento ad una RiceTrasmittente e quindi si usano i portatili in avanzo visto le situazioni abbastanza precarie dei servizi.

Sui vari 64 bit nessun problema.

Poi su un vecchio W7 32 bit ho optato per l'installazione di PYTHON ed utilizzo dei sorgenti direttamente; anche qui tutto OK

Ma siccome l'appetito vien mangiando ho riesumato un PC W-XP e vi ho installato PYTHON 3.4 che dalle mie ricerche sembra essere l'ultima versione utilizzabile su tale S.O.




Problema che appare mandando in esecuzione il tutto tramite un file Batch


==================

C:\PACKET\TERM_RCS\SOURCES>python.exe C:\PACKET\TERM_RCS\SOURCES\pkt_gui_rcs_support.py
Traceback (most recent call last):
File "C:\PACKET\TERM_RCS\SOURCES\pkt_gui_rcs_support.py", line 14, in <module> import pkt_gui_rcs
File "C:\PACKET\TERM_RCS\SOURCES\pkt_gui_rcs.py", line 14, in <module>from utility import Delivery
File "C:\PACKET\TERM_RCS\SOURCES\utility.py", line 14

if (instance := getattr(cls, inst_field, None)) is None:
^
SyntaxError: invalid syntax

============================

Quel := che funziona su 3.12 non funziona su 3.4

Nelle mie ricerche mi pare di aver capito che la sintassi sia camabiata dalla 3.8

Non ho però trovato una tabellina comparativa per poter fare almeno una prova




Grazie anticipato per ogni tipo di aiuto

--
Bruno L.
Pietro Bruno Lancerotto said @ 2024-08-30 15:36:58:
Quel := che funziona su 3.12 non funziona su 3.4

Walrus Operator.

Trovato qui : https://www.programmareinpython.it/blog/python-38-le-novita-piu-importanti/




Quindi io dovrei rappezzare a ritroso questo pezzo

if (instance := getattr(cls, inst_field, None)) is None:
            instance = orig_new(cls)
            if hasattr(cls, "__init__"):
                cls.__init__(instance, *args, **kwargs)
                delattr(cls, "__init__")
            setattr(cls, inst_field, instance)
        return instance





Poi speriamo che sia l'unico inghippo

[NdCM: modificata formattazione]


--- Ultima modifica di ㎝ in data 2024-08-30 17:13:23 ---
--
Bruno L.
Hai valutato se non ti convenga avviare il pc con un dongle linux lite aggiornato?
THE 🍺-WARE LICENSE (Revision ㊷):
<㎝🐌🐍.🇮🇹> wrote this post. As long as you retain this notice you
can do whatever you want with this stuff. If we meet some day, and you
think this stuff is worth it, you can buy me a 🍺 in return. -- ㎝
Hai valutato se non ti convenga avviare il pc con un dongle linux lite aggiornato?

No, e neanche ci penso

Se funziona così bene altrimenti non è di vitale importanza

--
Bruno L.
Pensando di aver capito che il tutto era dovuto ad una fantasiosa invenzione per risparmiare qualche carattere ho modificato così

#if (instance := getattr(cls, inst_field, None)) is None:
instance = getattr(cls, inst_field, None)
if instance is None:




Naturalmente oltrepassa il punto ma si ferma qui

msg = ['OUTCOME', f' Connessione con {self.svr} stabilita']

con questa indicazione

msg = ['OUTCOME', f' Connessione con {self.svr} stabilita']
^
SyntaxError: invalid syntax




Il cappelletto è in corrispondenza dell'apice a fine parola " stabilita "

Se avete qualche idea perchè non credo di riuscire ad arrivarci goooglando




--
Bruno L.
if (instance := getattr(cls, inst_field, None)) is None:
            instance = orig_new(cls)
            if hasattr(cls, "__init__"):
                cls.__init__(instance, *args, **kwargs)
                delattr(cls, "__init__")
            setattr(cls, inst_field, instance)
        return instance
senza walrus dovrebbe corrispondere a

instance = getattr(cls, inst_field, None)
if instance is None:
            instance = orig_new(cls)
            if hasattr(cls, "__init__"):
                cls.__init__(instance, *args, **kwargs)
                delattr(cls, "__init__")
            setattr(cls, inst_field, instance)
        return instance







THE 🍺-WARE LICENSE (Revision ㊷):
<㎝🐌🐍.🇮🇹> wrote this post. As long as you retain this notice you
can do whatever you want with this stuff. If we meet some day, and you
think this stuff is worth it, you can buy me a 🍺 in return. -- ㎝
Pietro Bruno Lancerotto said @ 2024-08-30 17:04:48:
Pensando di aver capito che il tutto era dovuto ad una fantasiosa invenzione per risparmiare qualche carattere ho modificato così

#if (instance := getattr(cls, inst_field, None)) is None:
instance = getattr(cls, inst_field, None)
if instance is None:
:ok:


Pietro Bruno Lancerotto said @ 2024-08-30 17:04:48:
Naturalmente oltrepassa il punto ma si ferma qui

msg = ['OUTCOME', f' Connessione con {self.svr} stabilita']

con questa indicazione

msg = ['OUTCOME', f' Connessione con {self.svr} stabilita']
                                                             ^
SyntaxError: invalid syntax

Il cappelletto è in corrispondenza dell'apice a fine parola " stabilita "

Se avete qualche idea perchè non credo di riuscire ad arrivarci goooglando

quella cosa f'...' si chiama f-string, ed è stata introdotta in python 3.7

https://docs.python.org/3.7/tutorial/inputoutput.html
dovresti poter ottenere un risultato simile con




msg = ['OUTCOME', ' Connessione con {0} stabilita'.format(self.svr)]


(untested)

THE 🍺-WARE LICENSE (Revision ㊷):
<㎝🐌🐍.🇮🇹> wrote this post. As long as you retain this notice you
can do whatever you want with this stuff. If we meet some day, and you
think this stuff is worth it, you can buy me a 🍺 in return. -- ㎝
msg = ['OUTCOME', ' Connessione con {0} stabilita'.format(self.svr)]
Funziona ;)

Devo dire che questo lo posso capire

I := per risparmare una riga e qualche carattere proprio no

Rende meno immediata la comprensione del codice

Poi uno lo sa e va bene così




Ti ringrazio per il supporto


--
Bruno L.


Pagina: 1



Esegui il login per scrivere una risposta.