我正在学习CS 50 p,导师说最好的做法是在Try中尽可能少地使用台词,最好是一句台词,但我真的很难做到这一点.

如何才能编写以下代码以便仅try 输入?

while True:
    try:
        # How to have just 1 line in try??
        order = input("Order: ").title().strip()
        if order in menu:
            price += menu[order]
            print(f"Total: ${price}")
    except (EOFError, KeyError):
        break

推荐答案

最佳实践的原因是try声明体中尽可能少的行,是为了确保只有一个可能的源产生正在处理的异常,以便异常处理程序的逻辑可以专门针对错误的性质进行定制.

在您的情况下,EOFError只能由input函数引发,KeyError只能由访问menu[order]时丢失的键引发,因此您可以将这两个特定的陈述包含在try条陈述中:

while True:
    try:
        order = input("Order: ").title().strip()
    except EOFError:
        break
    if order in menu:
        try:
            price += menu[order]
        except KeyError:
            break
        print(f"Total: ${price}")

KeyError不太可能出现,因为您已经将menu[order]放入order in menuif条件中,因此您可以删除if条件以采用EAFP代码模式:

while True:
    try:
        order = input("Order: ").title().strip()
    except EOFError:
        break
    try:
        price += menu[order]
    except KeyError:
        break
    print(f"Total: ${price}")

Python相关问答推荐

键盘.任务组

使用imap-tools时错误,其邮箱地址包含域名中的非默认字符

自定义新元未更新参数

pyautogui.locateOnScreen在Linux上的工作方式有所不同

Python中使用时区感知日期时间对象进行时间算术的Incredit

如何在具有重复数据的pandas中对groupby进行总和,同时保留其他列

重新匹配{ }中包含的文本,其中文本可能包含{{var}

Pandas 有条件轮班操作

如何记录脚本输出

如果值不存在,列表理解返回列表

无法定位元素错误404

如何将一个动态分配的C数组转换为Numpy数组,并在C扩展模块中返回给Python

Streamlit应用程序中的Plotly条形图中未正确显示Y轴刻度

从spaCy的句子中提取日期

如何更新pandas DataFrame上列标题的de值?

如何从需要点击/切换的网页中提取表格?

Python Pandas获取层次路径直到顶层管理

Flask Jinja2如果语句总是计算为false&

如何使用使用来自其他列的值的公式更新一个rabrame列?

为什么常规操作不以其就地对应操作为基础?