"Erwartet Typ" Union " [str, bytearray]' got 'int' statt" Warnung in der write-Methode
Mein script schreibt die Datei chunk für chunk mit einem pre-generierte Daten, Muster:
# Data pattern generator
def get_random_chunk_pattern():
return ''.join(random.choice(ascii_uppercase + digits + ascii_lowercase) for _ in range(8))
....
# DedupChunk class CTOR:
class DedupChunk:
def __init__(self, chunk_size, chunk_pattern, chunk_position=0, state=DedupChunkStates.PENDING):
self._chunk_size = chunk_size # chunk size in bytes
self._chunk_pattern = chunk_pattern
self._chunk_position = chunk_position
self._state = state
self.mapping = None
@property
def size(self):
return self._chunk_size
@property
def pattern(self):
return self._chunk_pattern
@property
def position(self):
return self._chunk_position
@property
def state(self):
return self._state
....
# Here Chunk object is being initialized (inside other class's CTOR):
chunk_size = random.randint(64, 192) * 1024 # in bytes
while (position + chunk_size) < self.file_size: # generating random chunks number
self.chunks.append(DedupChunk(chunk_size, DedupChunkPattern.get_random_chunk_pattern(), position))
....
# Actual writing
with open(self.path, 'rb+') as f:
for chunk in self.chunks:
f.write(chunk.pattern * (chunk.size // 8))
PyCharm
zeigt "Expected type 'Union[str, bytearray]' got 'int' instead
" Warnung in write-Methode
Aber beim entfernen der division in
f.write(chunk.pattern * chunk.size)
oder division aussen:
chunk.size //= 8
f.write(chunk.pattern * chunk.size)
Warnung verschwunden
Was eigentlich hier passiert?
Dank
nun,zunächst
Oops mein Fehler. Aktualisierung
Ohne zu wissen, den Inhalt und die Art der
chunk.Muster ist inialised von get_random_chunk_pattern( )
Ich vermute, dass dein chunk.das Muster ist irgendwie int zurückgeben, anstatt was Sie denken, es ist. Versuchen Sie explizite Konvertierung in eine Zeichenfolge mit
chunk.size
und chunk_size
sind nicht das gleiche...Oops mein Fehler. Aktualisierung
Ohne zu wissen, den Inhalt und die Art der
chunk.pattern
es ist schwer zu wissen, was Los ist. Können Sie schreiben chunk.pattern
Datei ohne die Multiplikation?chunk.Muster ist inialised von get_random_chunk_pattern( )
Ich vermute, dass dein chunk.das Muster ist irgendwie int zurückgeben, anstatt was Sie denken, es ist. Versuchen Sie explizite Konvertierung in eine Zeichenfolge mit
str(chunk.pattern *(chunk.size // 8))
und sehen, was Sie bekommen
InformationsquelleAutor Samuel | 2015-10-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Warnung ignorieren. Die IDE macht eine beste Schätzung (beschränkte Informationen), was der Datentyp wird zur Laufzeit, aber es ist zu erraten falsch. Das heißt, es ist ziemlich vernünftig zu erwarten, dass etwas, multipliziert mit einem
int
wird durch eineint
wenn Sie nicht wissen, was dieses etwas eigentlich ist.Wenn Sie wirklich wollen, um dieses Problem zu lösen, dann sagen die IDE, was Sie erwarten
chunk.pattern
sein, schreiben einen doc-string für Ihre Klasse (oder mit Hilfe von Anmerkungen zu bieten Typbestimmung).zB.
InformationsquelleAutor Dunes