如何正确处理来自Rust中maxminddb :: geoip2的AddressNotFound错误?

克里斯·盖伊

我只有一小段代码需要修复,并且对Rust不太了解。

当我执行以下命令时,某些IP值将失败。

let city: geoip2::City = georeader.lookup(ip).unwrap();
let c_name = city.city
                .and_then(|cy| cy.names)
                .and_then(|n| n.get("en")
                .map(String::from));

let loc = city.location.unwrap();
let lat = loc.latitude.unwrap();
let lon = loc.longitude.unwrap();

它失败,并带有AddressNotFound异常。

我试图用返回默认值

let city: geoip2::City = georeader.lookup(ip).unwrap_or_else(|err| geoip2::City::default(););

用它不起作用,也不能完全解决我的问题。

最后,我想抓住AddressNotFound并进行设置

let c_name = "unknown"
let loc = None
let lat = ""
let lon = ""

并在可用时使用实际值

let c_name = city.city
                .and_then(|cy| cy.names)
                .and_then(|n| n.get("en")
                .map(String::from));
let loc = city.location.unwrap();
...

该城市何时可用。

我只是不知道如何在Rust中做这样的事情。有人可以针对这个特定案例为我提供快速示例或帮助吗?

更新时间

我发表评论并尝试了以下操作:

let city: std::result::Result<Option<geoip2::City>, maxminddb::MaxMindDBError> = georeader.lookup(ip);
let (c_name, lat, lon) = match city {
  Ok(Some(city)) => (
    city.city.and_then(|cy| cy.names)
             .and_then(|n| n.get("en")
             .map(String::from)),
    city.location.unwrap().latitude.unwrap(),
    city.location.unwrap().longitude.unwrap()
   ),
   _ => (Some("unknown".to_owned()), 0.0_f64, 0.0_f64),
 };

我知道必须找到一种在这种情况下使用多个city.location属性的方法。我目前收到此错误:

error[E0382]: use of moved value: `city.location`
  --> src/main.rs:93:15
   |
92 |               city.location.unwrap().latitude.unwrap(),
   |               ------------- value moved here
93 |               city.location.unwrap().longitude.unwrap()
   |               ^^^^^^^^^^^^^ value used here after move
   |
阿列克谢·拉里奥诺夫(Alexey Larionov)

也许您可以这样,尽管我是从脑海中键入内容,所以请期待它不会立即生效

let (c_name, loc, lat, lon) = match city.city {
  Ok(Some(names)) => (
    names.get("en").to_string(), 
    city.location, 
    <something>, 
    <something>,
  ),
  _ => ("unknown", None, "", ""),
}

更新:首先,实体喜欢CityLocation支持Clone特征,因此您可以克隆然后代替移动,但是还有另一种肮脏的方式使用.as_ref()

let city: std::result::Result<Option<geoip2::City>, maxminddb::MaxMindDBError> = georeader.lookup(ip);
let (c_name, lat, lon) = match city {
  Ok(Some(city)) => (
    city.city.and_then(|cy| cy.names)
             .and_then(|n| n.get("en")
             .map(String::from)),
    city.location.as_ref().unwrap().latitude.unwrap(),
    city.location.as_ref().unwrap().longitude.unwrap()
   ),
   _ => (Some("unknown".to_owned()), 0.0_f64, 0.0_f64),
 };

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何为maxmind geoip2 eclipse添加依赖项

来自分类Dev

在Django中为GeoIP2创建项目设置

来自分类Dev

如何正确处理Hystrix后备广告中的预期错误?

来自分类Dev

如何正确处理 VBA 中的 FollowHyperlink 错误?

来自分类Dev

如何在 MVVM 中使用 RxSwift 正确处理来自 api 请求的错误?

来自分类Dev

Geoip2的python库在pySpark的map函数中不起作用

来自分类Dev

MaxMind:将GeoIP2 mmdb加载到内存中以快速读取

来自分类Dev

如何正确处理请求承诺错误?

来自分类Dev

如何正确处理python错误

来自分类Dev

Firebase函数如何正确处理错误

来自分类Dev

Pandas:如何正确处理 df2 中的行 = df1 中的列?

来自分类Dev

如何使用Promise正确处理express.js中的错误(字符串或对象)

来自分类Dev

如何正确处理ASP.NET Core MVC中的AJAX错误?

来自分类Dev

Spark-如何正确处理RDD.map()方法中的错误情况?

来自分类Dev

Python GeoIP2 AddressNotFoundError

来自分类Dev

如何正确处理服务器端错误?

来自分类Dev

如何在Laravel中正确处理错误?

来自分类Dev

如何正确处理多个运行时错误?

来自分类Dev

如何确保此函数正确处理错误?

来自分类Dev

使用批处理更新项目 - 如何正确处理错误和成功?

来自分类Dev

正确处理数据库错误

来自分类Dev

如何使用 PHP API 和 AngularJS 2 服务正确处理/获得正确的 JSON 响应?

来自分类Dev

如何正确处理axios错误以及如何获取详细的错误描述?

来自分类Dev

正确处理Angular 2 http结果

来自分类Dev

Django:如何正确处理自定义form_valid()的错误

来自分类Dev

使用流程替换时,如何捕获退出代码/正确处理错误?

来自分类Dev

内存泄漏和带有可运行类的奇怪错误-如何正确处理对象?

来自分类Dev

连接到RESTful API时如何正确处理can-connect错误

来自分类Dev

在Kotlin中使用HTTP客户端时如何正确处理错误?

Related 相关文章

  1. 1

    如何为maxmind geoip2 eclipse添加依赖项

  2. 2

    在Django中为GeoIP2创建项目设置

  3. 3

    如何正确处理Hystrix后备广告中的预期错误?

  4. 4

    如何正确处理 VBA 中的 FollowHyperlink 错误?

  5. 5

    如何在 MVVM 中使用 RxSwift 正确处理来自 api 请求的错误?

  6. 6

    Geoip2的python库在pySpark的map函数中不起作用

  7. 7

    MaxMind:将GeoIP2 mmdb加载到内存中以快速读取

  8. 8

    如何正确处理请求承诺错误?

  9. 9

    如何正确处理python错误

  10. 10

    Firebase函数如何正确处理错误

  11. 11

    Pandas:如何正确处理 df2 中的行 = df1 中的列?

  12. 12

    如何使用Promise正确处理express.js中的错误(字符串或对象)

  13. 13

    如何正确处理ASP.NET Core MVC中的AJAX错误?

  14. 14

    Spark-如何正确处理RDD.map()方法中的错误情况?

  15. 15

    Python GeoIP2 AddressNotFoundError

  16. 16

    如何正确处理服务器端错误?

  17. 17

    如何在Laravel中正确处理错误?

  18. 18

    如何正确处理多个运行时错误?

  19. 19

    如何确保此函数正确处理错误?

  20. 20

    使用批处理更新项目 - 如何正确处理错误和成功?

  21. 21

    正确处理数据库错误

  22. 22

    如何使用 PHP API 和 AngularJS 2 服务正确处理/获得正确的 JSON 响应?

  23. 23

    如何正确处理axios错误以及如何获取详细的错误描述?

  24. 24

    正确处理Angular 2 http结果

  25. 25

    Django:如何正确处理自定义form_valid()的错误

  26. 26

    使用流程替换时,如何捕获退出代码/正确处理错误?

  27. 27

    内存泄漏和带有可运行类的奇怪错误-如何正确处理对象?

  28. 28

    连接到RESTful API时如何正确处理can-connect错误

  29. 29

    在Kotlin中使用HTTP客户端时如何正确处理错误?

热门标签

归档