gpt4 book ai didi

返回和检查方法执行的 Pythonic 方式

转载 作者:行者123 更新时间:2023-12-04 07:23:51 28 4
gpt4 key购买 nike

返回和检查方法执行的 Pythonic 方式
我目前在 python 代码中使用 golang 编码风格,决定移动 pythonic 方式
例子:

import sys
from typing import Union, Tuple

def get_int_list(list_data: list) -> Tuple[Union[list, None], bool]:
try:
return [int(element) for element in list_data], True
except ValueError:
print("Failed to convert int elements list")
return None, False

my_list = ["1", "2", "a"]

int_list, status = get_int_list(my_list)
if not status:
sys.exit(1)
sys.exit(0)
我在 python docs 中读到 pythonic 的做法是引发异常。
任何人都可以为我提供上述方法的示例吗?

最佳答案

就个人而言,我会大大简化这一点。
这种情况下的注释对您没有多大作用。
int()实际上,内存数据中只有两个可能的错误:

  • ValueError - 尝试转换无法转换的内容,例如 int('😀')
  • TypeError - 尝试转换字符串或数字类型(如 int(1.23) )以外的内容,例如 int({'1':'2'})int(['1','2'])将是类型错误。

  • 鉴于其定义的范围,这是您应该在函数中处理的仅有的两个异常。如果您尝试并广泛地处理超出您准备处理的范围,则风险掩蔽 many other exceptions由 Python、操作系统或调用此函数的程序部分更好地处理。
    如果成功和 None,则返回项目在 Python 中也更为常见。如果不。一定要明确测试 is None vs 只是测试返回错误的真实性。返回 None0[]都是 False但只有 None is没有任何。 (尽管您在 Python 中采用的方式是 is seen,但恕我直言,这并不是 super 常见的。)
    简化:
    import sys

    def get_int_list(list_data):
    try:
    return [int(element) for element in list_data]
    # limit 'except' to:
    # 1) What is a likely exception in THIS function directly from 'try' and
    # 2) what you are prepared to handle
    # Other exceptions should be handled by caller, Python or OS
    except (ValueError, TypeError) as e:
    print("Failed to convert int elements list")
    print(e)
    # options now are:
    # 1) return None
    # 2) return []
    # 3) exit program here
    # 4) set a flag by returning a consistent data structure or object
    # which you choose is based on how the function is called
    return None

    # you would handle Exceptions building the list HERE - not in the function
    my_list = ["1", "2", "3"]

    nums=get_int_list(my_list)
    if nums is None:
    # failure -- exit
    sys.exit(1)
    #success
    print(nums)
    sys.exit(0)
    当然还有其他方法,比如使用 decoratorUser Defined Exception但是当您有更多可能的错误需要处理时使用这些。

    关于返回和检查方法执行的 Pythonic 方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68331744/

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