gpt4 book ai didi

这两个规范的 Python 代码等效

转载 作者:太空宇宙 更新时间:2023-11-03 20:55:50 24 4
gpt4 key购买 nike

将以下两个规范转换为 Python 代码时遇到问题。我发现 Python 程序的术语很奇怪(抛出、捕获、异常内容)。

第一个规范规定“如果文件因不存在而无法打开,则必须捕获 FileNotFoundError 对象并抛出一个新的异常 FileNotFoundError,异常的内容是文件名。任何其他无法打开的异常没有被捕获。文件名被发送到函数中。

我将其翻译为...

try:
f = open(filename)
except FileNotFoundError(filename):
raise FileNotFoundError(filename)

我问的正如我已经说过的;术语很奇怪;例如“异常的内容是文件名”。

另外一个规范是,如果参数文件名不是字符串类型,则抛出 TypeError 异常,异常内容为字符串“参数文件名不是字符串”。

再说一遍,“异常(exception)的内容”?

我对该规范的翻译是...

x = isinstance(filename, (str))
if x == False:
raise TypeError('parameter filename is not a string')

最佳答案

首先,我们在 python 中执行 except Exception:,而不是您所做的 except FileNotFoundError(filename):

是的,一种思考方式是,如果open找不到文件,它会抛出FileNotFoundError,我们可以通过捕获一般异常并打印它来看到这一点.

filename = 'abcd'
try:
f = open(filename)
except Exception as e:
print('{} {}'.format( e.__class__.__name__, e))

这将给出

FileNotFoundError [Errno 2] No such file or directory: 'abcd'

e.__class__.__name__ 给出异常类的名称,e 给出字符串描述

现在做你正在做的事情的正确方法是什么

filename = 'abcd'
try:
f = open(filename)
except FileNotFoundError:
raise FileNotFoundError(filename)

这意味着当open抛出FileNotFoundError时,捕获该特定异常,并在通过执行FileNotFoundError(filename)<修改异常字符串后重新抛出它,这里我们将异常字符串修改为文件名

为了看看现在发生了什么,我们这样调用这个函数

def func():

filename = 'abcd'
try:
f = open(filename)
except FileNotFoundError:
raise FileNotFoundError(filename)

try:
func()
except Exception as e:
print('{} {}'.format(e.__class__.__name__, e))

这将输出FileNotFoundError abcd。我们在这里看到异常字符串或您所说的内容,文件名在这里被打印为异常字符串。

下面还有你的假设

x = isinstance(filename, (str))
if x == False:
raise TypeError('parameter filename is not a string')

是正确的,文件名不仅包括字符串,还包括整数,正如我们在文档中看到的: https://docs.python.org/3/library/functions.html#open

file is a path-like object giving the pathname (absolute or relative to the current working directory) of the file to be opened or an integer file descriptor of the file to be wrapped.

下面是一个例子

filename = 1.45
try:
f = open(filename)
except Exception as e:
print('{} {}'.format( e.__class__.__name__, e))

输出是TypeError需要整数参数,得到了浮点,因为它尝试将浮点转换为整数,将其视为文件描述符,但它得到了浮点

关于这两个规范的 Python 代码等效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56036647/

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