TypeError:+不支持的操作数类型:“ NoneType”和“ NoneType”

时间:2019-04-01 03:21:58

标签: python odoo nonetype

我是Python的新用户,我遇到<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk"></script> <div class="map"> <div class="btn_mapa" id="1" data-id="San Diego, CA">San Diego</div> <div class="btn_mapa" id="2" data-id="Belo Horizonte, MG">Belo Horizonte</div> <div class="btn_mapa" id="3" data-id="New York, NY">New York, NY</div> <!–– ... many others ... ––> <div class="btn_mapa" id="259" data-id="Atlanta, GA">Atlanta, GA</div> </div> <div id="map-canvas"></div> <script> var geocoder; var map; var div1 = document.getElementById("1"); var address = div1.getAttribute("data-id"); function initialize() { geocoder = new google.maps.Geocoder(); var latlng = new google.maps.LatLng(-34.397, 150.644); var myOptions = { zoom: 8, center: latlng, mapTypeControl: true, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.DROPDOWN_MENU }, navigationControl: true, mapTypeId: google.maps.MapTypeId.ROADMAP }; map = new google.maps.Map(document.getElementById("map-canvas"), myOptions); var btn_mapa = document.getElementsByClassName('btn_mapa'); for (var i = 0; i < btn_mapa.length; i++) { google.maps.event.addDomListener(btn_mapa[i], 'click', function() { var address = this.getAttribute('data-id'); console.log(address); geocodeAddress(address); }); } } google.maps.event.addDomListener(window, 'load', initialize); function geocodeAddress(address) { if (geocoder) { geocoder.geocode({ address: address }, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { if (status != google.maps.GeocoderStatus.ZERO_RESULTS) { map.setCenter(results[0].geometry.location); } else { alert("No results found"); } } else { alert("Geocode was not successful for the following reason: " + status); } }); } } </script>类型的问题,我看了另一个问题,但问题仍然存在。

我的代码正在寻找两个日期之间的星期五和星期六,到目前为止,它仍然有效,但是当我将两者加总时,会出现此错误:

  

“ TypeError:+不支持的操作数类型:'NoneType'和'NoneType'

将结果返回到函数中之后。

这是我的代码:

None

4 个答案:

答案 0 :(得分:0)

我玩过您的代码。似乎有点工作。它可以算出一周中哪些日期存在于一系列日期中。当您的日期范围中既没有星期五也没有星期六时,就会出现您看到的问题(请注意,您有一个名为“ mon”的变量,该变量是通过查找键“星期五”设置的。)

因此,看来您的问题是,您必须考虑以下情况:在输入的日期范围内,一周中的这两天都不存在。在这种情况下,地图中将不存在week.get('Friday')和week.get('Saturday')中的一个或两个,因此周一和/或 sat ,并且您将遇到问题。

为使您的代码运行,我在代码下方添加了此代码:

class Rec:
    def __init__(self, start, end):
        self.mission_start_date = start
        self.mission_end_date = end

self = [
    Rec("2019-3-31", "2019-4-1")
]

get_compensation(self)

这使我可以使您的代码处理一对日期。如果我在此处给出的日期范围包括星期五和星期六,则您的代码运行良好。否则,它会完全拒绝您正在谈论的错误。

如果更改行:

mon = week.get('Friday')
sat = week.get('Saturday')

收件人:

mon = week.get('Friday') if 'Friday' in week else 0
sat = week.get('Saturday') if 'Saturday' in week else 0

然后您的代码在我进行测试的任何日期范围内都不会崩溃。我不知道它是否在计算所需的结果,因为您没有保留或返回任何计算结果。

答案 1 :(得分:0)

  • 要注意的一件事是,开始和结束日期是否都包含在日期范围内。例如,如果两个日期都是datetime.datetime(2019, 3, 1),那么答案应该是1吗?
...
def get_compensation(self):
    def date_range_inclusive(rec):
        # if either date is undefined, then so is date range
        if not rec.mission_end_date or not rec.mission_start_date:
            return iter([])

        # Add 1 for inclusivity of both start and end dates
        num_days = abs((rec.mission_end_date - rec.mission_start_date).days) + 1
        return (rec.mission_start_date + timedelta(days=n) for n in range(num_days))

    for rec in self:
        # date range, including both start and end dates
        dates = date_range_inclusive(rec)
        # desired days to count
        day_selection = (calendar.FRIDAY, calendar.SATURDAY)

        rec.days_compensation = sum([dt.weekday() in day_selection for dt in dates])

上面的代码将假定日期范围包括在内。删除+ 1以使其不包含在内。如果不包括星期五或星期六,则会将days_compensation字段设置为0。

computed fields are not stored by default, they are computed and returned when requested. Setting store=True will store them in the database and automatically enable searching

因此,您可能需要:

days_compensation = fields.Float(compute='get_compensation', compstring='Jours de récupération', help="Jours de récupération si la mission contient les jours de repos", required=True, readonly=True,
store=True)

请注意,唯一的更新是store=True

答案 2 :(得分:0)

我想。您可以使用datetime formate来在两个日期范围之间的星期六返回星期五 并检查日期名称是否为必填项的条件

此格式的打印日期名称。 “%A”

答案 3 :(得分:0)

这是针对从搜索引擎到达这里的人。 我在导入数据时遇到此错误。之所以发生,是因为我将产品ID字段映射到Product而不是Product/External ID。因此,如果在导入数据时遇到此错误,请检查id字段是否映射正确。