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

我不太熟悉Python,但我正在尝试创建一个程序,该程序可以接收文件名,工作表名称,每月付款,用户每月额外付款和本金贷款金额。然后,程序应使用提交的名称创建一个Excel文件,并使用提交的名称创建一个工作表。在Excel工作表中,开始从余额中减去每月付款,将其写入excel工作表并计算付款日期,然后对额外金额执行相同的操作并继续重复,直到余额达到0。我已经使用递归执行此操作,但我得到以下错误


zsh: segmentation fault  python3 loanPayoff.py

以下是我的代码:


  import datetime

import xlsxwriter

import sys


sys.setrecursionlimit(10**6)


# we create the workbook

def 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 date

def workBookUpdateDate(date, row, workSheet):

    dateColumn = 0

    workSheet.write(row, dateColumn, date)


# update the workbook's worksheet with the new balance

def workBookUpdateBalance(balance, row, workSheet):

    balanceColumn = 1

    workSheet.write(row, balanceColumn, balance)


# update the workbook's worksheet with the regular amount being paid

def workBookUpdateRegularAmount(regularAmount,row, workSheet):

    regularAmountColumn = 2

    workSheet.write(row, regularAmountColumn, regularAmount)


# update the workbook's worksheet with the additional amount being paid

def workBookUpdateAdditionalAmount(additionalAmount,row, workSheet):

    additionalAmountColumn = 3

    workSheet.write(row, additionalAmountColumn, additionalAmount)


# increment the date by two weeks

def addTwoWeeksToDate(date):

    twoWeeks = datetime.timedelta(days=14)

    newDate = date + twoWeeks

    #print("DATE ......", format(newDate))

    return newDate


萧十郎
浏览 90回答 2
2回答

繁星点点滴滴

我假设你的问题是递归限制的变化从此链接: https://bugs.python.org/issue35542https://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。

当年话下

蟒蛇在正常情况下不会“赛格v”。关于你的Python安装的一些东西坏了。您应该尝试将其替换为全新安装。另外,以你的方式递归有点奇怪。您可以将其编写为迭代运行,并且更清晰。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python