为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我在使用 python3 时遇到分段错误?

为什么我在使用 python3 时遇到分段错误?

萧十郎 2022-09-27 09:29:33
我不太熟悉Python,但我正在尝试创建一个程序,该程序可以接收文件名,工作表名称,每月付款,用户每月额外付款和本金贷款金额。然后,程序应使用提交的名称创建一个Excel文件,并使用提交的名称创建一个工作表。在Excel工作表中,开始从余额中减去每月付款,将其写入excel工作表并计算付款日期,然后对额外金额执行相同的操作并继续重复,直到余额达到0。我已经使用递归执行此操作,但我得到以下错误zsh: segmentation fault  python3 loanPayoff.py以下是我的代码:  import datetimeimport xlsxwriterimport syssys.setrecursionlimit(10**6)# we create the workbookdef createWorkBook(workBookName, workSheetName, monthly, principal, additional, date):    #creating the workbook    workbook = xlsxwriter.Workbook(workBookName + '.xlsx')    worksheet = workbook.add_worksheet(workSheetName)    worksheet.write('A1', 'Date')    worksheet.write('B1', 'Mortgage principal amount')    worksheet.write('C1', 'Regular amount against principal')    worksheet.write('D1', 'Against principal additional')    payments(monthly, additional, principal, worksheet, 'regular', date, 1)    workbook.close()# update the workbook's worksheet with the next datedef workBookUpdateDate(date, row, workSheet):    dateColumn = 0    workSheet.write(row, dateColumn, date)# update the workbook's worksheet with the new balancedef workBookUpdateBalance(balance, row, workSheet):    balanceColumn = 1    workSheet.write(row, balanceColumn, balance)# update the workbook's worksheet with the regular amount being paiddef workBookUpdateRegularAmount(regularAmount,row, workSheet):    regularAmountColumn = 2    workSheet.write(row, regularAmountColumn, regularAmount)# update the workbook's worksheet with the additional amount being paiddef workBookUpdateAdditionalAmount(additionalAmount,row, workSheet):    additionalAmountColumn = 3    workSheet.write(row, additionalAmountColumn, additionalAmount)# increment the date by two weeksdef addTwoWeeksToDate(date):    twoWeeks = datetime.timedelta(days=14)    newDate = date + twoWeeks    #print("DATE ......", format(newDate))    return newDate
查看完整描述

2 回答

?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

我假设你的问题是递归限制的变化

从此链接: https://bugs.python.org/issue35542

https://docs.python.org/3/library/sys.html#sys.setrecursionlimit

可能的最高限制取决于平台。当用户具有需要深度递归的程序和支持更高限制的平台时,可能需要将限制设置得更高。这应该小心完成,因为过高的限值会导致崩溃。

我认为这是一个已知的情况,在设置更高的递归限制时,在可以提高递归错误之前,堆栈限制被击中取决于操作系统。在我的机器(Mac 10.10.4)上,这在2.7上是segfault,但在Python 3.7.1上提高了递归错误。将限制增加到 200000 会导致在 3.7.1 上使用 segfault。


查看完整回答
反对 回复 2022-09-27
?
当年话下

TA贡献1890条经验 获得超9个赞

蟒蛇在正常情况下不会“赛格v”。关于你的Python安装的一些东西坏了。您应该尝试将其替换为全新安装。

另外,以你的方式递归有点奇怪。您可以将其编写为迭代运行,并且更清晰。


查看完整回答
反对 回复 2022-09-27
  • 2 回答
  • 0 关注
  • 89 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信