ПИТОН: Как отловить исключение для множественной проверки в блоке try? - PullRequest
0 голосов
/ 18 марта 2019

Как отловить исключение для множественной проверки в одном блоке try? Это возможно или мне нужно использовать несколько блоков try для этого? Вот мой код:

import sys

def math_func(num1, num2):
    return num1*num2

a,b = map(str,sys.stdin.readline().split(' '))
try:
    a = int(a)        
    b = int(b)
    print("Result is - ", math_func(a,b), "\n")
except FirstException: # For A
    print("A is not an int!")
except SecondException: # For B
    print("B is not an int!")

Ответы [ 2 ]

1 голос
/ 18 марта 2019

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

import sys
import traceback

def math_func(num1, num2):
    return num1*num2

a,b = map(str, sys.stdin.readline().split(' '))
try:
    a = int(a)        
    b = int(b)
    print("Result is - ", math_func(a,b), "\n")
except ValueError: 
    print(traceback.format_exc())

Это напечатает, какая строка вызывает ошибку

0 голосов
/ 18 марта 2019

Вы действительно можете поймать два исключения в одном блоке, это можно сделать так:

import sys
def mathFunc(No1,No2):
    return No1*No2
a,b = map(str,sys.stdin.readline().split(' '))
    try:
        a = int(a)        
        b = int(b)
        print("Result is - ",mathFunc(a,b),"\n")
    except (FirstException, SecondException) as e: 
        if(isinstance(e, FirstException)):
            # put logic for a here
        elif(isinstance(e, SecondException)):
            # put logic for be here
        # ... repeat for more exceptions

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

Надеюсь, это поможет!

Возможно, дубликат этого ?

...