我在"类型错误"中犯了什么错误?为什么它在 except 部分的变量名称中显示"可以未定义"?


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()调用引发的,那么daymonth中的一个或两个永远不会被分配,因此不能在异常块中使用,除非在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

相关内容

最新更新