Přejít na hlavní obsah

Vyvolání neplatného volaného objektu ValueError

  • Nela Jaroš
  • Rady

Chyba ValueError může nastat při volání objektu, který není volaný. V Pythonu je volaný objekt obvykle funkcí nebo metodou, kterou lze vyvolat pomocí závorek. Pokud se však pokusíte vyvolat objekt, který nemá metodu __call__, objeví se chyba ValueError.

Chyba ValueError může se objevit například při pokusu o vyvolání proměnné, což je číslo nebo řádek. K chybě může dojít také při pokusu o vyvolání instance třídy, která nemá metodu __call___. Možnost vyvolání objektu se obvykle kontroluje pomocí funkce callable(). Pokud se hodnota callable rovná True, může být objekt vyvolán, jinak je volaný objekt nepřípustný.

Příklad použití funkce callable():

V příkladu výše, proměnné a a b nejsou to volané objekty, takže funkce callable() pro ně vrací False. Proměnná c je to Vestavěná funkce sum, kterou lze vyvolat, takže callable() pro ni vrátí True. Proměnná d není také volaným objektem, takže callable() pro ni vrací False.

Co je ValueError a jak jej vyvolat

Tato výjimka může nastat, když se pokusíte převést hodnotu na datový typ, který nelze správně reprezentovat danou hodnotou.

Například hodnotu " abc "nelze představit v celočíselném typu dat, takže při pokusu o převod řetězce" abc " na celočíselnou hodnotu bude excitována výjimka ValueError.

Chcete-li vyvolat ValueError, musíte použít klíčové slovo raise a zadat samotnou výjimku a volitelnou zprávu:

Příklad:
raise ValueError ("nesprávná hodnota")

Chybovou zprávu můžete vynechat, ale dobrým postupem je poskytnout informativní zprávu, která vývojářům pomůže pochopit, kde se chyba stala a proč.

Kromě toho může být ValueError způsoben vestavěnými funkcemi a metodami při nesprávném použití. Například funkce int () vyvolá ValueError, pokud je přenášena nesprávnou hodnotou pro převod na celé číslo.

Zpracování výjimky ValueError umožňuje spravovat takové situace a poskytovat uživateli informace o nesprávných hodnotách, aby se zabránilo neočekávanému chování programu.

Určení nepřípustného volaného objektu

Příklad neplatného volaného objektu může vypadat následovně:

  • Řetězec (například" příklad") nemůže být způsoben, protože to není funkce nebo metoda.
  • Číslo (například 42) také nemůže být způsobeno, protože se nejedná o volaný objekt.
  • None, což je speciální hodnota v Pythonu, také není volaný objekt.

Když vyvoláte objekt, který nelze vyvolat, Python vygeneruje chybu ValueError. Pokud jste obdrželi chybu ValueError, musíte zkontrolovat, zda je váš objekt volán. To lze provést pomocí funkce callable (), která kontroluje, zda může být objekt vyvolán.

Příklad kontroly objektu volatelnosti:

my_object = "пример"if callable(my_object):my_object() # Вызов объектаelse:print("Объект не может быть вызван")

Rozpoznání výskytu chyby ValueError

Chyby ValueError mohou nastat, když je předán argument s hodnotou, která není přijata funkcí nebo metodou. To může být způsobeno nesprávnou validací uživatelského vstupu, aritmetickými operacemi nebo použitím nesprávných hodnot pro argumenty funkce.

Příkladem je použití funkce int () k převodu řetězce na celé číslo. Pokud řetězec obsahuje něco jiného než číslo, bude excitována výjimka ValueError. Například:

num = int("abc") # ValueError: invalid literal for int() with base 10: 'abc'

K rozpoznání výskytu chyby ValueError lze použít konstrukci try-except. V bloku try lze umístit kód, který by mohl potenciálně způsobit ValueError, a v bloku except určit, jaký typ chyby je třeba zpracovat. Například:

try:num = int("abc")except ValueError:print("Произошла ошибка ValueError!")

Závěr programu bude:

Произошла ошибка ValueError!

To umožňuje programátorovi zpracovat výjimky, které mohou nastat při provádění kódu, a podniknout příslušné kroky v případě chyby.

Příčiny chyby ValueError

K chybě ValueError dochází, když funkce předávají argument s nesprávnou hodnotou, který nelze zpracovat nebo neodpovídá očekávanému formátu.

Zde je několik nejčastějších příčin chyby ValueError:

DůvodPříklad
Převod řádku na čísloint("abc")
Hledání hodnoty v seznamulst.index(10)
Převod datového typufloat("10.5")
Zadání nepřípustného argumentu funkcerange("10")

V každém z těchto případů funkce očekává určitý typ dat nebo formát a při přenosu argumentu, který není v souladu s tímto očekáváním, dochází k chybě ValueError.

Abyste se vyhnuli chybě ValueError, musíte se ujistit, že přenášené argumenty odpovídají očekávanému typu dat nebo formátu. To lze provést pomocí podmíněných operátorů nebo zpracováním výjimek.