[英]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.