当我编译包含错误的代码时,编译器并没有指向我输入错误的实际行。当我使用宏时会发生这种情况,例如: with io.open(file_path, 'w') as file:
self.blob_service.get_blob_to_stream(container_name='container', blob_name=blob_name, stream=file)
。
这是一个示例错误:
try!
我希望<std macros>:5:8: 6:45 error: mismatched types [E0308]
<std macros>:5 return $ crate :: result :: Result :: Err (
^
<std macros>:5:8: 6:45 note: in this expansion of try! (defined in <std macros>)
<std macros>:5:8: 6:45 help: run `rustc --explain E0308` to see a detailed explanation
<std macros>:5:8: 6:45 note: expected type `std::path::PathBuf`
<std macros>:5:8: 6:45 note: found type `std::result::Result<_, _>`
能够指向我实际编辑过的导致错误的文件行,但我只看到来自rustc
的行。
有没有办法找出问题的来源,或者我应该评论和取消注释所有可能的候选人?
一般问题看起来或多或少像这样
std::macros
我将use std::result::Result;
use std::path::PathBuf;
fn get_destination_path() -> PathBuf {
PathBuf::from(try!(get_res()))
}
fn get_res() -> Result<String, String> {
Ok("a".to_string())
}
声明为返回get_destination_path
而不是PathBuf
,这会导致错误。
我发现只有当我使用nigtly版本的Result<PathBuf, String>
(我在货物项目目录中执行rustc
)时才会发生这种情况。
当我使用常规生锈时,我会得到更好的错误
multirust override nightly
所以这发生在error: main function not found
<std macros>:5:8: 6:42 error: mismatched types:
expected `std::path::PathBuf`,
found `core::result::Result<_, _>`
(expected struct `std::path::PathBuf`,
found enum `core::result::Result`) [E0308]
<std macros>:5 return $ crate:: result:: Result:: Err (
<std macros>:6 $ crate:: convert:: From:: from ( err ) ) } } )
src/main.rs:6:18: 6:33 note: in this expansion of try! (defined in <std macros>)
上,可能只是一个错误。