[Python] ValueError: embedded null byte

Alessandro Dentella sandro a e-den.it
Mer 4 Apr 2018 12:38:44 CEST


On Wed, Apr 04, 2018 at 12:05:44PM +0200, Gollum1 wrote:
> Il 4 aprile 2018 08:56, Alessandro Dentella <sandro a e-den.it> ha scritto:
>
> >> camera = "DigitalDigital HH"
> >
> > Se fosse veramente quello il valore della variabile 'camera' non ci
> > sarebbero problemi:
> >
> >    $ ipython3
> >
> >    In [1]: import os
> >
> >    In [2]: camera = "DigitalDigital HH"
> >
> >    In [3]: os.path.exists(os.path.join('/tmp', camera))
> >    Out[3]: False
> >
> > Per prima cosa aggiungerei nel try/except:
> >
> >    import ipdb; ipdb.set_trace()
>
> questo non mi funziona, non ho il modulo installato evidentemente,
> provvederò quanto prima.

vitale per un debug efficace:

   pip install ipdb


> > così sperimenti direttamente e ti fai un'idea chiara.
> > len(camera) ti restituisce 17 o la variabile ha qualche carattere non
> > rappresentato magari nella tua codifica?
>
> bella lì... mi len mi dice che è lungo 32 caratteri... :O
>
> > Prova con repr(camera)
>
> (32) - DigitalDigital HH
> 'Digital\x00\x00Digital \x00H\x00\x00\x00\x01\x00\x00\x00H\x00\x00\x00\x01\x00'
>
> eccolo lì... e spiegato anche il motivo per cui anche facendo uno
> split sullo spazio, in realtà non risolvevo il problema, non è
> visibile, ma rompe...
>
> esiste un qualche comando che mi permetta di "sanare" una stringa così
> fatta? un camera.encode(utf8) potrebbe essere la soluzione?

In [2]: import re

In [3]: camera = 'Digital\x00\x00Digital \x00H\x00\x00\x00\x01\x00\x00\x00H\x00\x00\x00\x01\x00'

In [4]: c2 = re.sub('[^a-zA-Z0-9_ ]', '', camera)

In [5]: len(c2)
Out[5]: 17

In [6]: c2
Out[6]: 'DigitalDigital HH'

In [7]: len(camera)
Out[7]: 32



*:-)


Maggiori informazioni sulla lista Python