Python: Как узнать, какая часть вызывает ошибку, используя try / исключением? - PullRequest
0 голосов
/ 26 сентября 2019

Я хочу использовать только один try\except для многих переменных.Я хочу выяснить, какая часть вызывает ошибку, чтобы я мог напечатать ее пользователю в разделе except.

try:
    i = int(i)
    j = int(j)
    k = int(k)
    l = int(l)
    m = int(m)
    n = int(n)
    n+1 = int(n+1)
    ...
    ..
    .

except ValueError:

    print('Please enter an integer as {}'.format(# whether i, j, k, l, or ...))

Я хочу выяснить, какая int(x) вызывает ошибку, поэтому яможно распечатать это пользователю?Есть ли способ сделать это?Я не хочу пробовать каждую часть, потому что мои переменные почти бесконечны;)

Ответы [ 3 ]

2 голосов
/ 26 сентября 2019

Примерно так:

def parse_int(num, name='var'):
    try:
        return int(num)
    except ValueError:
        print(f"Please enter an integer for {name}")


i = parse_int(i, name='i')

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

PS: вы не можете назначить выражение, подобное n+1 - эта последняя строка перед except в вашем коде не будет работать

1 голос
/ 26 сентября 2019

Я думаю, что у @rdas есть лучший ответ, но, так как вам это не понравилось, вы также можете сделать что-то вроде этого, это выглядит немного хакерским и не намного лучше, чем делать try/except в каждой строке..

try:
    last = 'i'
    i = int('10')
    last = 'j'
    j = int('ten')
except ValueError:
    print(f'Please enter an integer as {last}')
1 голос
/ 26 сентября 2019

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

my_list=[]
my_list_variables=["a","b","c"]
i=0
while True:
    try:
        x=int(input("Please input "+my_list_variables[i]+" : "))
        my_list.append(x)
        i=i+1
        #Just make sure to add a if statement to quit out of the loop
        #Like if that is end of the amount of input you are asking.
        break
    except ValueError:
        #index i doesn't change so you can tell the user which variable they
        #entered a wrong input for.
        print("Error: input "+my_list_variables[i]+" have to be a number")

Просто храните другой список переменных имен.

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