我NSFileManager.contentsOfDirectoryAtPath
用来获取目录中文件名的数组。我想使用新的do-try- catch
语法来处理错误:
do {
let docsArray = try fileManager.contentsOfDirectoryAtPath(docsPath)
} catch {
// handle errors
print(error) // this is the best I can currently do
}
我可以想象出一个错误可能是docsPath
不存在,但我不知道如何捕获此错误。而且我不知道还会发生什么其他错误。
该错误处理的文件有这样一个例子
enum VendingMachineError: ErrorType {
case InvalidSelection
case InsufficientFunds(centsNeeded: Int)
case OutOfStock
}
和
do {
try vend(itemNamed: "Candy Bar")
// Enjoy delicious snack
} catch VendingMachineError.InvalidSelection {
print("Invalid Selection.")
} catch VendingMachineError.OutOfStock {
print("Out of Stock.")
} catch VendingMachineError.InsufficientFunds(let amountNeeded) {
print("Insufficient funds. Please insert an additional \(amountNeeded) cents.")
}
但是我不知道如何捕捉具有使用throws
关键字的方法的标准Swift类型错误。
该对的NSFileManager类的引用contentsOfDirectoryAtPath
不说,可能会返回什么样的错误。因此,我不知道要捕获什么错误,或者如果得到它们,该如何处理。
我想做这样的事情:
do {
let docsArray = try fileManager.contentsOfDirectoryAtPath(docsPath)
} catch FileManagerError.PathNotFound {
print("The path you selected does not exist.")
} catch FileManagerError.PermissionDenied {
print("You do not have permission to access this directory.")
} catch ErrorType {
print("An error occured.")
}
NSError
自动桥接到ErrorType
域变为类型(例如NSCocoaErrorDomain
变为CocoaError
)和错误代码变为值(NSFileReadNoSuchFileError
变为.fileNoSuchFile
)的位置
import Foundation
let docsPath = "/file/not/found"
let fileManager = FileManager()
do {
let docsArray = try fileManager.contentsOfDirectoryAtPath(docsPath)
} catch CocoaError.fileNoSuchFile {
print("No such file")
} catch let error {
// other errors
print(error.localizedDescription)
}
至于知道哪个错误可以通过特定的调用返回,只有文档可以提供帮助。几乎所有Foundation错误都是该CocoaError
域的一部分,并且可以在中找到FoundationErrors.h
(尽管Foundation中有时会返回POSIX错误,NSPOSIXErrorDomain
但也存在一些罕见的错误),但是这些错误可能尚未完全消除,因此您必须依靠管理它们在NSError
水平上。
可以在《将Swift与Cocoa和Objective-C结合使用(Swift
2.2)》中
找到更多信息。
问题内容: 这可能很容易。我们知道运算符会对整数进行整数运算(环绕),而运算符会导致错误。 这是什么错误?我无法捕获它,也无法将其变成可选的: 我很确定,这种错误与(除以零)中的错误相同,但我不知道是否可以捕获此类错误。我缺少什么简单的东西?能不能被困住?如果是这样,怎么办? 问题答案: 在异常和运行时错误之间进行区分。引发异常并可以将其捕获。运行时错误会使您的程序停滞不前。添加和获取溢出是简单而
问题内容: 我在让Chai的node.js应用程序进行测试时遇到问题。测试会因引发的错误而不断失败,但是如果我将测试用例包装在try和catch中并断言所捕获的错误,它将起作用。 难道不喜欢的工作,我认为它应该还是什么? 失败: 问题答案: 您必须将一个函数传递给。像这样: 执行此操作的方式将传递给call 的 结果。但是要测试是否抛出了某些东西,您必须将一个函数传递给,该函数会自行调用。上面使用
最近我被要求在我的代码中捕获可抛出的内容。所以我们遇到了一个争论,我们是否应该这样做,我给出了一个OutOfMemoryError的例子,在这种情况下,即使我们捕获到错误,我们的代码也不会被进一步处理。 所以为了测试这个理论,我们为它创建了示例代码。 在Wed Jun 16 14:20:41 IST 2021时间运行测试 try Block内部 catch Block内部 Java.lang.Ou
在我的Node.js应用程序的测试中,让Chai的 工作时遇到了问题。测试在抛出的错误上不断失败,但是如果我将测试用例包装在try和catch中,并在捕获的错误上断言,它就会工作。 不像我认为的那样工作吗? 失败:
出于某种原因,这段代码给了我一个无法捕捉的异常错误。catch块似乎没有捕捉到错误。try catch块的作用范围是否如此,以至于我不能在嵌套函数中抛出一个错误,然后期望它被一个作用范围更高的catch语句捕获?我正在使用的应用程序中的一些敏感数据已经被删除,但它预期leadInfo[ 0 / 1]将是一个32个字符的字母数字字符串,我从URL参数中提取。 这里的根本问题是我的AJAX调用从API
我有一个类(我不能修改),它只有一个构造函数,它接受一个参数,如下所示: 由于构造函数可以抛出错误,我想实现错误处理。我的第一次尝试是: 但是,现在在块的范围内,不能在其他地方使用。如果我理解正确,我不能在没有初始化的情况下声明对象,因此我可以在块之外声明。那么,我该如何捕捉构造函数抛出的错误呢? 编辑:为了澄清,这是在我的中,在中我将中止程序。此外,参数是一个将被打开的文件,因此没有已知的安全输