try:
day = int(input())
month = int(input())
if month == 0:
raise ZeroDivisionError
elif day > 31 or month > 12:
raise ValueError
elif type(day) != int() or type(month) != int():
raise TypeError
except ZeroDivisionError:
print(month, "is not a valid month")
except ValueError:
if month > 12:
print(month, 'is not a valid month')
elif day > 31:
print(day, 'is not a valid day of any month')
except TypeError:
print("Please do not enter any string as input")
else:
if day < 10:
distance = 5 + (day * 2) / month
else:
distance = 3 + (day / month)
print(distance, "Kilometres")
当我运行它并输入一个无效的数据类型变量时,它不会引发TypeError
,而是显示ValueError
。在我的代码中,except部分开始,PyCharm显示我的变量'month'
和'day'
是未定义的。我该怎么办?
input()
总是返回一个字符串
int()
类型转换对于不可解析的输入将抛出ValueError
,否则始终是int
类型。
因此,您的type()
检查是毫无意义的(无论如何您都会使用isinstance
来检查类型)。
如果一个异常是由int()
调用引发的,那么day
或month
中的一个或两个永远不会被分配,因此不能在异常块中使用,除非在try
之外预先声明
。
day = None
month = None
try:
day = int(input())
month = int(input())
except ValueError:
if day is not None:
# then the error is on the month
else:
# error on the day
我建议为范围验证定义自己的DateError
类