繁体   English   中英

记录异常而不破坏 Python 中的代码执行

[英]Logging Exceptions Without breaking the code execution in Python

我正在学习 Python 并编写了一个接受用户输入进行基本计算的测试。 我还试图在文件中记录异常和结果。 所以,我想用任何用户输入(例如 str 或特殊字符)测试我的 function,它不应该停止执行。 有人可以看一下我的代码吗? 提前致谢!

import logging

logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
formatter = logging.Formatter("%(asctime)s: %(name)s: %(message)s")
logging.basicConfig(filename="arithmetic_test.log", level=logging.DEBUG, format="%(asctime)s: %(name)s: %(message)s")


class Calculator:
    def __init__(self):
        pass

    def add(self, a, b):
        if isinstance(a, int) and isinstance(b, int):
            try:
                logger.debug("\nAdding two integers")
                result = a + b
            except ValueError as e:
                logger.error("\nAddition not allowed by Invalid type")
                raise e
            else:
                return result

    def sub(self, a, b):

        if isinstance(a, int) and isinstance(b, int):
            logger.info("\nSubtracting two integers")
            return a - b
        else:
            logger.info("\nSubtraction not allowed by Invalid type", TypeError)

    def mul(self, a, b):

        if isinstance(a, int) and isinstance(b, int):
            logger.info("\nMultiplying two integers")
            return a * b
        else:
            logger.info("\nMultiplication not allowed by invalid type", TypeError)

    def div(self, a, b):
        try:
            if isinstance(a, int) and isinstance(b, int):
                result = a / b
                logger.info("\nDividing two integers")
        except ZeroDivisionError:
            logger.exception("\n Division not allowed by zero\n")
        except ValueError:
            logger.exception("\n Division not allowed by invalid type\n")
            raise
        else:
            return result


class CalculatorApp:
    calc = Calculator()
    while True:
        print("Please select operation -n"
              "1. Addn"
              "2. Subtractn"
              "3. Multiplyn"
              "4. Dividen")

        # Take input from the user
        select = int(input("Select operations form 1, 2, 3, 4 :"))

        number_1 = int(input("Enter first number: "))
        number_2 = int(input("Enter second number: "))

        if select == 1:
            print(number_1, "+", number_2, "=", calc.add(number_1, number_2))

        elif select == 2:
            print(number_1, "-", number_2, "=", calc.sub(number_1, number_2))

        elif select == 3:
            print(number_1, "*", number_2, "=", calc.mul(number_1, number_2))

        elif select == 4:
            print(number_1, "/", number_2, "=", calc.div(number_1, number_2))
        else:
            print("Invalid input")
            break

将代码包含在# Take input from the user in a try except块中,因为您正在接受输入并尝试将其直接转换为 integer 这给出了异常,因为任何非数字字符都无法转换为 integer


class CalculatorApp:
    calc = Calculator()
    while True:
        print("Please select operation -n"
              "1. Addn"
              "2. Subtractn"
              "3. Multiplyn"
              "4. Dividen")

        try:
            # Take input from the user
            select = int(input("Select operations form 1, 2, 3, 4 :"))

            number_1 = int(input("Enter first number: "))
            number_2 = int(input("Enter second number: "))

            if select == 1:
                print(number_1, "+", number_2, "=", calc.add(number_1, number_2))

            elif select == 2:
                print(number_1, "-", number_2, "=", calc.sub(number_1, number_2))

            elif select == 3:
                print(number_1, "*", number_2, "=", calc.mul(number_1, number_2))

            elif select == 4:
                print(number_1, "/", number_2, "=", calc.div(number_1, number_2))
            else:
                print("Invalid input")
                break
        except Exception as e:
            print(str(e))

我认为您使用 ValueError 定义了一个异常,但您正试图引发 TypeError 以及引发线。 您可以尝试将 TypeError 更改为 ValueError 并删除加注线吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM