PYTHON:如何在try块中捕获多次验证的异常?

时间:2019-03-18 11:12:12

标签: python try-except

如何在单个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 个答案:

答案 0 :(得分:1)

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())

这将打印出导致错误的行

答案 1 :(得分:0)

您确实可以在一个块中捕获两个异常,这可以像这样完成:

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,这在必须在运行时维护程序执行的情况下非常方便,但是最好的方法是避免这种情况并捕获特定的异常

希望这会有所帮助!

可能是this的副本吗?