Python 3.x 带有长消息的Python 3异常有点不可读
我知道有很多类似的问题,但没有一个能真正解决我想知道的问题。假设我在python包的某个地方抛出一个异常,并给出一条长消息以帮助用户避免该问题:Python 3.x 带有长消息的Python 3异常有点不可读,python-3.x,exception,Python 3.x,Exception,我知道有很多类似的问题,但没有一个能真正解决我想知道的问题。假设我在python包的某个地方抛出一个异常,并给出一条长消息以帮助用户避免该问题: if list(par_names)[0] is not "scan": raise SanityCheckException("Error in signature of user-supplied log-likelihood function! The first argument must be named 'scan' and wil
if list(par_names)[0] is not "scan":
raise SanityCheckException("Error in signature of user-supplied log-likelihood function! The first argument must be named 'scan' and will be passed a reference to a global ScannerBit object that can be used to e.g. print extra information to the scan output file.")
我的问题是,当触发错误时,消息显示得相当不可读:
Traceback (most recent call last):
File "basic_test.py", line 37, in <module>
myscan = sb.Scan(test_logl, bounds=[[1., 40.]] * 3, prior_types=["flat", "flat", "log"], prior_func=prior, scanner="twalk", settings=settings, model_name='model1')
File "/home/farmer/anaconda3/envs/general/lib/python3.6/site-packages/pyscannerbit/scan.py", line 116, in __init__
raise SanityCheckException("Error in signature of user-supplied log-likelihood function! The first argument must be named 'scan' and will be passed a reference to a global ScannerBit object that can be used to e.g. print extra information to the scan output file.")
pyscannerbit.scan.SanityCheckException: Error in signature of user-supplied log-likelihood function! The first argument must be named 'scan' and will be passed a reference to a global ScannerBit object that can be used to e.g. print extra information to the scan output file.
回溯(最近一次呼叫最后一次):
文件“basic_test.py”,第37行,在
myscan=sb.Scan(test_logl,bounds=[[1,40.]]*3,prior_types=[“flat”,“flat”,“log”],prior_func=prior,scanner=“twalk”,settings=settings,model_name='model1')
文件“/home/farmer/anaconda3/envs/general/lib/python3.6/site packages/pyscannerbit/scan.py”,第116行,在__
raise SanityCheckException(“用户提供的日志似然函数签名错误!第一个参数必须命名为“scan”,并将传递一个全局ScannerBit对象的引用,该对象可用于(例如)将额外信息打印到扫描输出文件。”)
pyscannerbit.scan.SanityCheckException:用户提供的日志似然函数签名错误!第一个参数必须命名为“scan”,并将被传递到全局ScannerBit对象的引用,该对象可用于(例如)向扫描输出文件打印额外信息。
我的意思是,如果你尝试的话,你可以把它挖出来,但是读起来并不好。我可以捕捉错误,更好地打印消息,然后重新抛出它(以获得回溯),但我最终只会将长消息打印三次而不是两次
这里的实际最佳实践是什么?当我想给用户写一条长消息时,我不知道我“应该”做什么。我不确定您在这里想要什么答案。您将一个长字符串传递给
SanityCheckException
,然后“抱怨”您在回溯中得到了一个长字符串。您可以尝试使用多行字符串或在整个字符串中添加一些\n
。我不是这个意思。我的终端包装得很好,不过我可以手动添加一些换行符,使其更美观。但是我仍然得到了至少第一行的复制,并且这个错误并没有真正摆脱追踪。我想如果回溯根本不包含错误,我会更喜欢(我想我应该把它放在一个变量中?)。也许在开头和结尾加一条新行,这样就不会太“融入”回溯了?我只是想知道其他人如何处理长错误消息,或者我是否应该遵循一些约定。