[Python] ValueError: embedded null byte

Gollum1 gollum1.smeagol1 a gmail.com
Mer 4 Apr 2018 18:21:28 CEST


Il 4 aprile 2018 12:38, Alessandro Dentella <sandro a e-den.it> ha scritto:
> 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
>
lo stopped mi serve per vedere quel particolare caso, ora funziona
perfettamente, non ho più blocchi sui nomi delle directory che vado a
creare...

Stopped = False
if len(camera) == 32:
    Stopped = True
print("(" + str(len(camera)) + ") - " + camera)
print(repr(camera))
camera = re.sub('[^\s\w\d]', '', camera)
print("(" + str(len(camera)) + ") - " + camera)
print(repr(camera))

if Stopped:

exit()

Grazie
-- 
Gollum1 - http://www.gollumone.it
Tesssssoro, dov'é il mio tessssoro...


Maggiori informazioni sulla lista Python