Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 带有长消息的Python 3异常有点不可读_Python 3.x_Exception - Fatal编程技术网

Python 3.x 带有长消息的Python 3异常有点不可读

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

我知道有很多类似的问题,但没有一个能真正解决我想知道的问题。假设我在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 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
。我不是这个意思。我的终端包装得很好,不过我可以手动添加一些换行符,使其更美观。但是我仍然得到了至少第一行的复制,并且这个错误并没有真正摆脱追踪。我想如果回溯根本不包含错误,我会更喜欢(我想我应该把它放在一个变量中?)。也许在开头和结尾加一条新行,这样就不会太“融入”回溯了?我只是想知道其他人如何处理长错误消息,或者我是否应该遵循一些约定。