gpt4 book ai didi

python - Python 在短路 bool 值之前会引发 TypeErrors 吗?

转载 作者:太空狗 更新时间:2023-10-30 02:33:54 26 4
gpt4 key购买 nike

我有一个函数可以在一个或多个指定的日子(例如,第一个和第 15 个)执行每月任务。为了增强可用性,我想让用户只在他们只希望它发生时传入一个 int每月一天,或每月多个事件的整数列表。

monthly_event(days_of_month=1, event="paycheck") 
monthly_event(days_of_month=[1,15], event="bills", starting=date(2013,1,1))

在内部,该函数将遍历列表并执行与单个 int 相同的操作。

由于“int”不是可迭代的,我需要做一些事情来避免当用户只传递一个 int 时出现 TypeError。我很惊讶地发现使用“或”表达式并依赖短路不起作用——TypeError 仍然会发生。这是一个例子:

from datetime import date as date
dt = date.today()
days = 1
#days = [1,2]
if dt.day == days or dt.day in days:
print "GOOD"
else:
print "BAD"

我的第一个问题是:我是否误解了 Python,或者内部类型检查是否真的发生在 bool 表达式短路之前的整行代码上?这看起来很奇怪。

我的第二个问题是:执行此操作的 Pythonic 方法是什么?我想避免对“days”变量进行显式类型检查。使用 try/catch 只会使代码膨胀:

try:
if dt.day == days:
print "GOOD"
else:
print "BAD"
except TypeError:
if dt.day in days:
print "GOOD"
else:
print "BAD"

有什么明显的我忽略了吗?

最佳答案

我相信问题发生在 dt.day != days(并且短路未发生)时,Python 将尝试 dt.day in days 表达式, 并得到一个 TypeError

关于python - Python 在短路 bool 值之前会引发 TypeErrors 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11173317/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com