@@ -55,11 +55,17 @@ def _filter_pybids_none_any(dct):
5555 for k , v in dct .items ()
5656 }
5757
58- def _bids_filter (value ):
59- from json import loads
60-
61- if value and Path (value ).exists ():
62- return loads (Path (value ).read_text (), object_hook = _filter_pybids_none_any )
58+ def _bids_filter (value , parser ):
59+ from json import loads , JSONDecodeError
60+
61+ if value :
62+ if Path (value ).exists ():
63+ try :
64+ return loads (Path (value ).read_text (), object_hook = _filter_pybids_none_any )
65+ except JSONDecodeError as e :
66+ raise parser .error (f"JSON syntax error in: <{ value } >." )
67+ else :
68+ raise parser .error (f"Path does not exist: <{ value } >." )
6369
6470 verstr = f"fMRIPrep v{ config .environment .version } "
6571 currentv = Version (config .environment .version )
@@ -76,6 +82,7 @@ def _bids_filter(value):
7682 PathExists = partial (_path_exists , parser = parser )
7783 IsFile = partial (_is_file , parser = parser )
7884 PositiveInt = partial (_min_one , parser = parser )
85+ BIDSFilter = partial (_bids_filter , parser = parser )
7986
8087 # Arguments as specified by BIDS-Apps
8188 # required, positional arguments
@@ -139,7 +146,7 @@ def _bids_filter(value):
139146 "--bids-filter-file" ,
140147 dest = "bids_filters" ,
141148 action = "store" ,
142- type = _bids_filter ,
149+ type = BIDSFilter ,
143150 metavar = "FILE" ,
144151 help = "a JSON file describing custom BIDS input filters using PyBIDS. "
145152 "For further details, please check out "
0 commit comments