Поиск по сайту:

Примеры обработки исключений Python ValueError


1. Что такое Python ValueError?

Python ValueError возникает, когда функция получает аргумент правильного типа, но неподходящее значение. Также ситуация не должна описываться более точным исключением, таким как IndexError.

2. Пример ValueError

Вы получите ValueError с математическими операциями, такими как квадратный корень из отрицательного числа.

>>> import math
>>> 
>>> math.sqrt(-10)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: math domain error
>>> 

3. Обработка исключения ValueError

Вот простой пример обработки исключения ValueError с помощью блока try-except.

import math

x = int(input('Please enter a positive number:\n'))

try:
    print(f'Square Root of {x} is {math.sqrt(x)}')
except ValueError as ve:
    print(f'You entered {x}, which is not a positive number.')

Вот вывод программы с разными типами ввода.

Please enter a positive number:
16
Square Root of 16 is 4.0

Please enter a positive number:
-10
You entered -10, which is not a positive number.

Please enter a positive number:
abc
Traceback (most recent call last):
  File "/Users/pankaj/Documents/PycharmProjects/hello-world/journaldev/errors/valueerror_examples.py", line 11, in <module>
    x = int(input('Please enter a positive number:\n'))
ValueError: invalid literal for int() with base 10: 'abc'

Наша программа может вызывать ValueError в функциях int() и math.sqrt(). Таким образом, мы можем создать вложенный блок try-except для обработки обоих из них. Вот обновленный фрагмент, чтобы позаботиться обо всех сценариях ValueError.

import math

try:
    x = int(input('Please enter a positive number:\n'))
    try:
        print(f'Square Root of {x} is {math.sqrt(x)}')
    except ValueError as ve:
        print(f'You entered {x}, which is not a positive number.')
except ValueError as ve:
    print('You are supposed to enter positive number.')

4. Повышение ValueError в функции

Вот простой пример, когда мы вызываем ValueError для входного аргумента правильного типа, но неподходящего значения.

import math


def num_stats(x):
    if x is not int:
        raise TypeError('Work with Numbers Only')
    if x < 0:
        raise ValueError('Work with Positive Numbers Only')

    print(f'{x} square is {x * x}')
    print(f'{x} square root is {math.sqrt(x)}')

5. Ссылки

  • Обработка исключений Python
  • Документация по ValueError Python