diff --git a/juno_samples/rodinia/bfs/benches/bfs_bench.rs b/juno_samples/rodinia/bfs/benches/bfs_bench.rs
index dbe6db381cde8420d137f1070280e29bff43f2af..9c09c180a82cf402ae75b1f6d001b1065e7efd5c 100644
--- a/juno_samples/rodinia/bfs/benches/bfs_bench.rs
+++ b/juno_samples/rodinia/bfs/benches/bfs_bench.rs
@@ -14,7 +14,7 @@ fn bfs_bench(c: &mut Criterion) {
     let mut r = runner!(bfs);
 
     let input = "data/graph4096.txt";
-    let (nodes, source, edges) = parse_graph(input.into());
+    let (nodes, source, edges) = parse_graph(input.into()).unwrap();
     let n = nodes.len() as u64;
     let m = edges.len() as u64;
     let nodes = HerculesImmBox::from(&nodes as &[Node]);
@@ -26,7 +26,7 @@ fn bfs_bench(c: &mut Criterion) {
     });
 
     let input = "data/graph65536.txt";
-    let (nodes, source, edges) = parse_graph(input.into());
+    let (nodes, source, edges) = parse_graph(input.into()).unwrap();
     let n = nodes.len() as u64;
     let m = edges.len() as u64;
     let nodes = HerculesImmBox::from(&nodes as &[Node]);
@@ -38,7 +38,7 @@ fn bfs_bench(c: &mut Criterion) {
     });
 
     let input = "/scratch/aaronjc4/rodinia_3.1/data/bfs/graph64M.txt";
-    let (nodes, source, edges) = parse_graph(input.into());
+    let (nodes, source, edges) = parse_graph(input.into()).expect("PANIC: Couldn't read input file for 64M benchmark. Currently, this benchmark uses a hard-coded path, so it can only be run on the lab machines.");
     let n = nodes.len() as u64;
     let m = edges.len() as u64;
     let nodes = HerculesImmBox::from(&nodes as &[Node]);
diff --git a/juno_samples/rodinia/bfs/src/graph_parser.rs b/juno_samples/rodinia/bfs/src/graph_parser.rs
index fecd2a3ed86c23aa64511febb5fd7a5ece8fe0f7..f761d8ea47f428a0965cbf08c27f17270a5fa0d1 100644
--- a/juno_samples/rodinia/bfs/src/graph_parser.rs
+++ b/juno_samples/rodinia/bfs/src/graph_parser.rs
@@ -11,16 +11,18 @@ pub struct Node {
     pub num_edges: u32,
 }
 
-pub fn parse_graph(file: String) -> (Vec<Node>, u32, Vec<u32>) {
-    let mut file = File::open(file).expect("Error opening input file");
+pub fn parse_graph(file: String) -> Result<(Vec<Node>, u32, Vec<u32>), String> {
+    let mut file = File::open(file).map_err(|err| format!("Error opening input file: {}", err))?;
     let mut contents = String::new();
     file.read_to_string(&mut contents)
-        .expect("Error reading input file");
+        .map_err(|err| format!("Error reading input file: {}", err))?;
 
     let mut parser = nom::combinator::all_consuming(graph_parser);
-    let (_, result) = parser.parse(&contents).expect("Parser error");
+    let (_, result) = parser
+        .parse(&contents)
+        .map_err(|err| format!("Parsing error: {}", err))?;
 
-    result
+    Ok(result)
 }
 
 fn graph_parser<'a>(text: &'a str) -> nom::IResult<&'a str, (Vec<Node>, u32, Vec<u32>)> {
diff --git a/juno_samples/rodinia/bfs/src/lib.rs b/juno_samples/rodinia/bfs/src/lib.rs
index f64035409552c5b223b54bc0be8e8bf512698d30..e48dfe2235014c3bdb26337d2bfdd9d9e104c8a4 100644
--- a/juno_samples/rodinia/bfs/src/lib.rs
+++ b/juno_samples/rodinia/bfs/src/lib.rs
@@ -36,7 +36,7 @@ fn run_bfs(nodes: &[Node], source: u32, edges: &[u32]) -> Vec<i32> {
 pub fn bfs_harness(args: BFSInputs) {
     let BFSInputs { input } = args;
 
-    let (nodes, source, edges) = parse_graph(input);
+    let (nodes, source, edges) = parse_graph(input).unwrap();
 
     let costs_juno = run_bfs(&nodes, source, &edges);
     let costs_ref = rust_bfs::bfs(&nodes, source, &edges);