Ошибка ValueError при использовании формулы - PullRequest
0 голосов
/ 24 ноября 2018

У меня есть список:

['x', '-', '1', '=', '5']

Это код, который я написал:

if (a[1]) == '+':
    try:
        print(int(int(a[0])+int(a[2])))
    except ValueError:
        print(int(int(a[0])+int(a[4])))
    except ValueError:
        print(int(int(a[2])+int(a[4])))

if (a[1]) == '-':
    try:
        print(int(int(a[0])-int(a[2])))
    except ValueError:
        print(int(int(a[0])-int(a[4])))
    except ValueError:
        print(int(int(a[4])-int(a[2])))

, однако, эта попытка кроме показывает следующую ошибку и не может быть запущена.

Traceback (most recent call last):   File "Main.py", line 16, in <module>
    print(int(int(a[0])-int(a[2]))) ValueError: invalid literal for int() with base 10: 'x'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):   File "Main.py", line 18, in <module>
    print(int(int(a[0])-int(a[4]))) ValueError: invalid literal for int() with base 10: 'x'

Может кто-нибудь посоветовать мне, как исправить этот код?

Когда я запускаю со списком:

['1', '+', '3', '=', 'x']

это работает.

Ответы [ 2 ]

0 голосов
/ 24 ноября 2018

Основная проблема здесь связана с вашим исключением!При использовании множественного числа каждое должно охватывать одно исключение, и вы используете одно и то же исключение для обоих, и это приводит к неправильной работе программы.

Кроме того, есть несколько проблем с вашим кодом (к счастью, есть простое решение для них):
1) Вы используете слишком много приведенных типов int () без необходимости -> Как только вы используете int(a [n]), это уже целое число, поэтому нет необходимости повторять его в результате операции
2) Вы слишком усложняете свою логику для получения строки операции и преобразования ее в арифметический оператор

Чтобы решить эту проблему, я бы предложил:

import operator

operators = {
    '+' : operator.add,
    '-' : operator.sub,
    '*' : operator.mul,
    '/' : operator.truediv,
    '%' : operator.mod,
    '^' : operator.xor,
}

# Got to find which are the digits to operate
numbersToOperate = [int(a[i]) for i in (0,2,4) if a[i].isdigit()]

if (a[0] == str(numbersToOperate[0])):
    print(operators[a[1]](numbersToOperate[0], numbersToOperate[1]))
else:
    print(operators[a[1]](numbersToOperate[1], numbersToOperate[0]))
0 голосов
/ 24 ноября 2018

Ошибка возникает внутри except, и нет try, который обрабатывает ошибку внутри except, поэтому ошибка распространяется.

Поместите try в исключения, чтобы онине ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...