06 agosto, 2019

Bug fastidiosi specie quando fa troppo caldo


Ci sono eventi noti --stra-conosciuti-- che periodicamente tornano, quando non te lo espetti e devi correggere al volo, prima di subito.

Un caso --semplifico molto, cambio anche il linguaggio sempre per semplificare-- capitato nei giorni scorsi; probabilmente io sono quello che avrei dovuto controllare il codice e dare l'OK finale.

def foo(d):
    #to do
    #da fare
    return(d)

#main
print('main')
n = 5
print(n, foo(n))

st = 'ciao'
print(st, foo(st))


eseguendo si ottiene

$ py3 to-do.py
main
5 5
ciao ciao
$

OK, non va mai in errore, sembra funzionare anche se ovviamente NO! 👿
Una soluzione semplicissima, davvero elementare, che avrebbe (probabilmente) risolto tutto (o comunque facilitato enormemente):

def foo(d):
    return('#to do\n#da fare')

#main
print('main')
n = 5
print(n, foo(n))

st = 'ciao'
print(st, foo(st))


ed ecco

$ py3 to-do-e.py
main
5 #to do
#da fare
ciao #to do
#da fare
$

In un altro script (questa volta Python) trovo:

n = 12345678
d = 3
fmt = "f'{n:.{d}e}'"
print(fmt) ###
r = eval(fmt)
print(r)


l'istruzione indicata con ### l'ho aggiunta per visualizzare la f-string; funziona:

$ py3 f-ev.py
f'{n:.{d}e}'
1.235e+07
$

ma è ridondante, si può semplificare così:

n = 12345678
d = 3
r = f'{n:.{d}e}'
print(r)


ed ecco:

$ py3 f-ev-s.py
1.235e+07
$

Altrimenti non si capirebbe il motivo dell'introduzione delle f-strings.

A dire tutta la verità mi stava sfuggendo ancora una volta. Ma sono stato allertato da eval(), si porta dietro una fama, non sempre giustificata, che insospettisce chiunque appena compare.

Ma eval() non è come ce la raccontano, ecco. Certo non da abusarne, usare solo quando serve davvero.



Stack Overflow (e altri) la fa lunga su eval(), avevo inizialmente pensato di indagare ma fa troppo caldo (per non dire altro, cioè confessare il motivo vero).

🔴

Nessun commento:

Posta un commento