是否可能出现“Try / except ValueError UNLESS”?

Posted

技术标签:

【中文标题】是否可能出现“Try / except ValueError UNLESS”?【英文标题】:Is a "Try / Except ValueError UNLESS" possible? 【发布时间】:2018-11-10 17:55:17 【问题描述】:

我是 python 新手,在过去的几个小时里一直在拼命想弄清楚如何让它正常工作......

我确定这是非常简单的代码,但我就是不明白。

下面的代码应该是不言自明的,但基本上我要求用户将事件的日期输入为“int”,如果它不是数字,请让他们再试一次。 . 除非这是一个“?”

while True:
    date = None
    street = str(input('Name of street?: ').title())
    city = str(input("In what city?: ").title())
    while True:
        try:
            year = int(input("Date of event? (or '?'): "))
            if date == "?":
                break
        except Exception:
            print("That's not a date, try again!")
            continue
        break

似乎它甚至没有看到 IF,因为它在它可以之前就被“例外”抓住了。

【问题讨论】:

【参考方案1】:

如果您要在“?”时显示帮助或其他内容是输入,然后只需调用该函数以显示您当前有中断的帮助。

if date == "?":
    display_help()
    continue

然后,将读取输入和处理它分成两个步骤。

in = input("Date of event? (or '?'): ")
if in == "?":
    display_help()
    continue
year = int(in)

另外,你要求一个日期,然后假设输入了一年,我会在你的提示中更明确。

"请输入事件的年份,例如:1998" 或者你真正想要的任何形式。

【讨论】:

当你遇到a时你想发生什么? 当用户输入“?”时,应该绕过ValueError异常并返回“?” value 代替任何 int 否则将需要...【参考方案2】:

尝试使用 valueError 异常。另外我认为在你的帖子中你提到你想输入一个整数作为日期,所以我用日期替换了年份。如果您希望年份为整数,则可以将变量日期替换为年份。如果你想让用户输入年、日和月,那么这个程序需要重新设计一下。

date = None
street = str(input('Name of street?: ').title())
city = str(input("In what city?: ").title())
while True:
    date = input("Date of event? (or '?'): ")
    if date == "?":
        break
    else:
        try:
            date = int(date)
        except ValueError:
            print("That's not a date, try again!")
            continue
        break

【讨论】:

但是,不管异常的type如何,不会触发它忽略“if”语句吗……?我没有尝试过,但我相信它会......再次,无论异常类型如何 你是对的。我重新编辑了代码,但我不确定 OP 是否希望用户输入日期或年份。也许年份变量是一个错字,他的意思是日期。

以上是关于是否可能出现“Try / except ValueError UNLESS”?的主要内容,如果未能解决你的问题,请参考以下文章

排毒测试中是不是可能出现循环

jdk1.7扩容时,不论是否有链表,并发都可能出现循环链表

Springboot 事务回滚不生效可能出现的原因

WebAssembly 的出现是否意味着 Javascript 要完

warning MSB3245: 未能解析此引用。未能找到程序集“CemeteryBLL”。请检查磁盘上是否存在该程序集。 如果您的代码需要此引用,则可能出现编译错误。

为啥苹果手机老出现可能不支持此设备