F#:System.Net.WebException
F#: System.Net.WebException
我是编程新手,F# 是我的第一语言。我目前对.NET API 还很陌生。
作为初学者的项目,我想抓取一个网站。我想编写一个函数,给定一个特定的 URL,自动下载该页面上的所有 HTML 内容。但是,如果 URL 无效,我不想抛出 System.Net.WebException 消息,而是 return 布尔输出 "False"。
这是我的代码的相关部分:
let noSuchURL (url: string) =
let html = downloadHtmlFromUrl url
let regexPattern = @"<title>Page not found</title>"
let matchResult = Regex.IsMatch(html, regexPattern)
matchResult
(我在F# interactive中测试了downloadHtmlFromUrl函数,没问题。)
我意识到上面的代码在地址无效的情况下不会 return 布尔值。相反,System.Net.WebException 被抛出,消息为 "System.Net.WebException: The remote server returned an error: (404) Not Found".
我可以进行哪些更改以获得布尔输出?
也许能捕捉到异常?
let noSuchURL (url: string) =
try
let html = downloadHtmlFromUrl url
let regexPattern = @"<title>Page not found</title>"
let matchResult = Regex.IsMatch(html, regexPattern)
matchResult
with :? System.Net.WebException -> false
一个警告:如果有 WebException
,这个程序将 return false
,无论是什么原因引发的异常。如果你想在 404 响应中专门 return false
,你必须仔细查看 WebException
:
let noSuchURL (url: string) =
try
let html = downloadHtmlFromUrl url
let regexPattern = @"<title>Page not found</title>"
let matchResult = Regex.IsMatch(html, regexPattern)
matchResult
with
:? System.Net.WebException as e
when e.Status = WebExceptionStatus.ProtocolError ||
e.Status = WebExceptionStatus.NameResolutionFailure
-> false
有关 F# 异常的更多信息,请查看 https://msdn.microsoft.com/en-us/library/dd233194.aspx。
我是编程新手,F# 是我的第一语言。我目前对.NET API 还很陌生。
作为初学者的项目,我想抓取一个网站。我想编写一个函数,给定一个特定的 URL,自动下载该页面上的所有 HTML 内容。但是,如果 URL 无效,我不想抛出 System.Net.WebException 消息,而是 return 布尔输出 "False"。
这是我的代码的相关部分:
let noSuchURL (url: string) =
let html = downloadHtmlFromUrl url
let regexPattern = @"<title>Page not found</title>"
let matchResult = Regex.IsMatch(html, regexPattern)
matchResult
(我在F# interactive中测试了downloadHtmlFromUrl函数,没问题。)
我意识到上面的代码在地址无效的情况下不会 return 布尔值。相反,System.Net.WebException 被抛出,消息为 "System.Net.WebException: The remote server returned an error: (404) Not Found".
我可以进行哪些更改以获得布尔输出?
也许能捕捉到异常?
let noSuchURL (url: string) =
try
let html = downloadHtmlFromUrl url
let regexPattern = @"<title>Page not found</title>"
let matchResult = Regex.IsMatch(html, regexPattern)
matchResult
with :? System.Net.WebException -> false
一个警告:如果有 WebException
,这个程序将 return false
,无论是什么原因引发的异常。如果你想在 404 响应中专门 return false
,你必须仔细查看 WebException
:
let noSuchURL (url: string) =
try
let html = downloadHtmlFromUrl url
let regexPattern = @"<title>Page not found</title>"
let matchResult = Regex.IsMatch(html, regexPattern)
matchResult
with
:? System.Net.WebException as e
when e.Status = WebExceptionStatus.ProtocolError ||
e.Status = WebExceptionStatus.NameResolutionFailure
-> false
有关 F# 异常的更多信息,请查看 https://msdn.microsoft.com/en-us/library/dd233194.aspx。