无法将以下两个规范转换为Python代码。我发现该术语对于Python程序来说很奇怪(抛出,捕获,异常内容)。
第一个规范指出“如果由于文件不存在而无法打开该文件,则必须捕获FileNotFoundError对象,并引发一个新异常FileNotFoundError,该异常的内容为文件名。其他任何未能打开失败的异常都不会被捕获。filename发送到函数中。
我翻译成...
try:
f = open(filename)
except FileNotFoundError(filename):
raise FileNotFoundError(filename)
我已经说过了;术语很奇怪;例如“异常的内容就是文件名”。
另外,另一个规范是,如果参数文件名不是字符串类型,则抛出TypeError异常,并且异常内容为字符串“参数文件名不是字符串”。
再次,“例外的内容”?
我对该规范的翻译是...
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)
修改异常字符串后将其重新抛出,这里我们将异常字符串修改为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是一个类似路径的对象,提供了要打开的文件的路径名(相对于当前工作目录的绝对路径或相对于当前工作目录的路径)或要包装的文件的整数文件描述符。
以下是一个示例
filename = 1.45
try:
f = open(filename)
except Exception as e:
print('{} {}'.format( e.__class__.__name__, e))
输出为
TypeError integer argument expected, got float
,因为它试图将float转换为int,并将其视为文件描述符,但它得到了float