[{"data":1,"prerenderedAt":2105},["ShallowReactive",2],{"doc-\u002Ferrors\u002Fattributeerror-in-python-causes-and-fixes":3},{"id":4,"title":5,"body":6,"description":2098,"extension":2099,"meta":2100,"navigation":107,"path":2101,"seo":2102,"stem":2103,"__hash__":2104},"content\u002Ferrors\u002Fattributeerror-in-python-causes-and-fixes.md","AttributeError in Python: Causes and Fixes",{"type":7,"value":8,"toc":2078},"minimark",[9,13,21,24,43,50,55,58,160,169,178,182,188,191,216,219,256,259,271,275,280,300,303,325,329,332,397,400,426,429,447,458,462,465,519,521,544,547,615,617,659,662,717,719,752,755,763,774,778,781,784,819,821,849,855,887,889,899,902,911,975,977,993,997,1000,1029,1034,1037,1106,1108,1158,1160,1184,1187,1240,1242,1251,1254,1328,1337,1341,1344,1346,1443,1445,1514,1520,1523,1540,1543,1618,1627,1631,1637,1665,1668,1735,1737,1815,1818,1832,1839,1843,1846,1873,1876,1890,1893,1920,1924,1930,1952,1955,1969,1973,1978,1987,1991,2000,2004,2012,2016,2025,2029,2074],[10,11,5],"h1",{"id":12},"attributeerror-in-python-causes-and-fixes",[14,15,16,20],"p",{},[17,18,19],"code",{},"AttributeError"," happens when Python cannot find an attribute or method on an object.",[14,22,23],{},"This usually means one of these is true:",[25,26,27,31,34,40],"ul",{},[28,29,30],"li",{},"You used a method on the wrong type of value",[28,32,33],{},"You misspelled the attribute name",[28,35,36,37],{},"Your variable is ",[17,38,39],{},"None",[28,41,42],{},"The variable changed to a different type earlier in the code",[14,44,45,46,49],{},"A common example is trying to use ",[17,47,48],{},".split()"," on a list instead of a string.",[51,52,54],"h2",{"id":53},"quick-fix","Quick fix",[14,56,57],{},"Start by checking what the variable really is:",[59,60,65],"pre",{"className":61,"code":62,"language":63,"meta":64,"style":64},"language-python shiki shiki-themes material-theme-lighter github-light github-dark","value = [1, 2, 3]\n\nprint(type(value))\nprint(dir(value))\n\n# Check the method name and make sure the object type supports it\n","python","",[17,66,67,102,109,132,148,153],{"__ignoreMap":64},[68,69,72,76,80,84,88,91,94,96,99],"span",{"class":70,"line":71},"line",1,[68,73,75],{"class":74},"su5hD","value ",[68,77,79],{"class":78},"smGrS","=",[68,81,83],{"class":82},"sP7_E"," [",[68,85,87],{"class":86},"srdBf","1",[68,89,90],{"class":82},",",[68,92,93],{"class":86}," 2",[68,95,90],{"class":82},[68,97,98],{"class":86}," 3",[68,100,101],{"class":82},"]\n",[68,103,105],{"class":70,"line":104},2,[68,106,108],{"emptyLinePlaceholder":107},true,"\n",[68,110,112,116,119,123,125,129],{"class":70,"line":111},3,[68,113,115],{"class":114},"sptTA","print",[68,117,118],{"class":82},"(",[68,120,122],{"class":121},"sZMiF","type",[68,124,118],{"class":82},[68,126,128],{"class":127},"slqww","value",[68,130,131],{"class":82},"))\n",[68,133,135,137,139,142,144,146],{"class":70,"line":134},4,[68,136,115],{"class":114},[68,138,118],{"class":82},[68,140,141],{"class":114},"dir",[68,143,118],{"class":82},[68,145,128],{"class":127},[68,147,131],{"class":82},[68,149,151],{"class":70,"line":150},5,[68,152,108],{"emptyLinePlaceholder":107},[68,154,156],{"class":70,"line":155},6,[68,157,159],{"class":158},"sutJx","# Check the method name and make sure the object type supports it\n",[14,161,162,163,165,166,168],{},"Most ",[17,164,19],{}," problems happen because you called a method or attribute on the wrong type, used the wrong name, or got ",[17,167,39],{}," instead of the object you expected.",[14,170,171,172,177],{},"If you are new to debugging, this pairs well with a beginner guide on ",[173,174,176],"a",{"href":175},"\u002Fhow-to\u002Fhow-to-debug-python-code-beginner-guide\u002F","how to debug Python code",".",[51,179,181],{"id":180},"what-attributeerror-means","What AttributeError means",[14,183,184,185,187],{},"Python raises ",[17,186,19],{}," when you try to use an attribute or method that an object does not have.",[14,189,190],{},"A few important points:",[25,192,193,199,205],{},[28,194,195,196],{},"An attribute can be a value like ",[17,197,198],{},"user.name",[28,200,201,202],{},"An attribute can also be a method like ",[17,203,204],{},"text.upper()",[28,206,207,208],{},"The error message usually tells you:\n",[25,209,210,213],{},[28,211,212],{},"the object type",[28,214,215],{},"the missing attribute name",[14,217,218],{},"Example error message:",[59,220,222],{"className":61,"code":221,"language":63,"meta":64,"style":64},"AttributeError: 'list' object has no attribute 'split'\n",[17,223,224],{"__ignoreMap":64},[68,225,226,228,231,235,239,242,245,248,250,253],{"class":70,"line":71},[68,227,19],{"class":121},[68,229,230],{"class":82},":",[68,232,234],{"class":233},"sjJ54"," '",[68,236,238],{"class":237},"s_sjI","list",[68,240,241],{"class":233},"'",[68,243,244],{"class":121}," object",[68,246,247],{"class":74}," has no attribute ",[68,249,241],{"class":233},[68,251,252],{"class":237},"split",[68,254,255],{"class":233},"'\n",[14,257,258],{},"In that example:",[25,260,261,266],{},[28,262,263,264],{},"the object type is ",[17,265,238],{},[28,267,268,269],{},"the missing attribute is ",[17,270,252],{},[51,272,274],{"id":273},"why-this-error-happens","Why this error happens",[14,276,277,279],{},[17,278,19],{}," usually happens for one of these reasons:",[25,281,282,285,288,294,297],{},[28,283,284],{},"You used a method that belongs to a different type",[28,286,287],{},"You made a spelling mistake in the attribute name",[28,289,290,291,293],{},"A variable contains ",[17,292,39],{},", not the object you expected",[28,295,296],{},"You reassigned a variable to a new type by mistake",[28,298,299],{},"You expected a module, class, or object to have a name that does not exist",[14,301,302],{},"Common causes include:",[25,304,305,308,311,314,319,322],{},[28,306,307],{},"Calling a string method on a list",[28,309,310],{},"Calling a list method on a string",[28,312,313],{},"Using the wrong capitalization in a method name",[28,315,316,317],{},"Trying to access an attribute on ",[17,318,39],{},[28,320,321],{},"Reassigning a variable to a different type",[28,323,324],{},"Using an attribute that does not exist on a module or custom object",[51,326,328],{"id":327},"example-that-causes-attributeerror","Example that causes AttributeError",[14,330,331],{},"Here is a short example that fails:",[59,333,335],{"className":61,"code":334,"language":63,"meta":64,"style":64},"values = [\"a\", \"b\", \"c\"]\nprint(values.split(\",\"))\n",[17,336,337,374],{"__ignoreMap":64},[68,338,339,342,344,346,349,351,353,355,358,361,363,365,367,370,372],{"class":70,"line":71},[68,340,341],{"class":74},"values ",[68,343,79],{"class":78},[68,345,83],{"class":82},[68,347,348],{"class":233},"\"",[68,350,173],{"class":237},[68,352,348],{"class":233},[68,354,90],{"class":82},[68,356,357],{"class":233}," \"",[68,359,360],{"class":237},"b",[68,362,348],{"class":233},[68,364,90],{"class":82},[68,366,357],{"class":233},[68,368,369],{"class":237},"c",[68,371,348],{"class":233},[68,373,101],{"class":82},[68,375,376,378,380,383,385,387,389,391,393,395],{"class":70,"line":104},[68,377,115],{"class":114},[68,379,118],{"class":82},[68,381,382],{"class":127},"values",[68,384,177],{"class":82},[68,386,252],{"class":127},[68,388,118],{"class":82},[68,390,348],{"class":233},[68,392,90],{"class":237},[68,394,348],{"class":233},[68,396,131],{"class":82},[14,398,399],{},"Output:",[59,401,402],{"className":61,"code":221,"language":63,"meta":64,"style":64},[17,403,404],{"__ignoreMap":64},[68,405,406,408,410,412,414,416,418,420,422,424],{"class":70,"line":71},[68,407,19],{"class":121},[68,409,230],{"class":82},[68,411,234],{"class":233},[68,413,238],{"class":237},[68,415,241],{"class":233},[68,417,244],{"class":121},[68,419,247],{"class":74},[68,421,241],{"class":233},[68,423,252],{"class":237},[68,425,255],{"class":233},[14,427,428],{},"Why this happens:",[25,430,431,436,441],{},[28,432,433,435],{},[17,434,382],{}," is a list",[28,437,438,440],{},[17,439,48],{}," is a string method",[28,442,443,444,446],{},"Lists do not have a ",[17,445,48],{}," method",[14,448,449,450,177],{},"If you are dealing with this exact error, see ",[173,451,453,454,457],{"href":452},"\u002Ferrors\u002Fattributeerror-list-object-has-no-attribute-fix\u002F","how to fix ",[17,455,456],{},"'list' object has no attribute"," errors",[51,459,461],{"id":460},"fix-1-use-the-correct-method-for-the-object-type","Fix 1: Use the correct method for the object type",[14,463,464],{},"First, check the type of the value:",[59,466,468],{"className":61,"code":467,"language":63,"meta":64,"style":64},"value = [\"apple\", \"banana\", \"orange\"]\nprint(type(value))\n",[17,469,470,505],{"__ignoreMap":64},[68,471,472,474,476,478,480,483,485,487,489,492,494,496,498,501,503],{"class":70,"line":71},[68,473,75],{"class":74},[68,475,79],{"class":78},[68,477,83],{"class":82},[68,479,348],{"class":233},[68,481,482],{"class":237},"apple",[68,484,348],{"class":233},[68,486,90],{"class":82},[68,488,357],{"class":233},[68,490,491],{"class":237},"banana",[68,493,348],{"class":233},[68,495,90],{"class":82},[68,497,357],{"class":233},[68,499,500],{"class":237},"orange",[68,502,348],{"class":233},[68,504,101],{"class":82},[68,506,507,509,511,513,515,517],{"class":70,"line":104},[68,508,115],{"class":114},[68,510,118],{"class":82},[68,512,122],{"class":121},[68,514,118],{"class":82},[68,516,128],{"class":127},[68,518,131],{"class":82},[14,520,399],{},[59,522,524],{"className":61,"code":523,"language":63,"meta":64,"style":64},"\u003Cclass 'list'>\n",[17,525,526],{"__ignoreMap":64},[68,527,528,531,535,537,539,541],{"class":70,"line":71},[68,529,530],{"class":78},"\u003C",[68,532,534],{"class":533},"sbsja","class",[68,536,234],{"class":233},[68,538,238],{"class":237},[68,540,241],{"class":233},[68,542,543],{"class":78},">\n",[14,545,546],{},"Now use a method that belongs to a list, not a string:",[59,548,550],{"className":61,"code":549,"language":63,"meta":64,"style":64},"value = [\"apple\", \"banana\", \"orange\"]\nvalue.append(\"grape\")\nprint(value)\n",[17,551,552,584,605],{"__ignoreMap":64},[68,553,554,556,558,560,562,564,566,568,570,572,574,576,578,580,582],{"class":70,"line":71},[68,555,75],{"class":74},[68,557,79],{"class":78},[68,559,83],{"class":82},[68,561,348],{"class":233},[68,563,482],{"class":237},[68,565,348],{"class":233},[68,567,90],{"class":82},[68,569,357],{"class":233},[68,571,491],{"class":237},[68,573,348],{"class":233},[68,575,90],{"class":82},[68,577,357],{"class":233},[68,579,500],{"class":237},[68,581,348],{"class":233},[68,583,101],{"class":82},[68,585,586,588,590,593,595,597,600,602],{"class":70,"line":104},[68,587,128],{"class":74},[68,589,177],{"class":82},[68,591,592],{"class":127},"append",[68,594,118],{"class":82},[68,596,348],{"class":233},[68,598,599],{"class":237},"grape",[68,601,348],{"class":233},[68,603,604],{"class":82},")\n",[68,606,607,609,611,613],{"class":70,"line":111},[68,608,115],{"class":114},[68,610,118],{"class":82},[68,612,128],{"class":127},[68,614,604],{"class":82},[14,616,399],{},[59,618,620],{"className":61,"code":619,"language":63,"meta":64,"style":64},"['apple', 'banana', 'orange', 'grape']\n",[17,621,622],{"__ignoreMap":64},[68,623,624,627,629,631,633,635,637,639,641,643,645,647,649,651,653,655,657],{"class":70,"line":71},[68,625,626],{"class":82},"[",[68,628,241],{"class":233},[68,630,482],{"class":237},[68,632,241],{"class":233},[68,634,90],{"class":82},[68,636,234],{"class":233},[68,638,491],{"class":237},[68,640,241],{"class":233},[68,642,90],{"class":82},[68,644,234],{"class":233},[68,646,500],{"class":237},[68,648,241],{"class":233},[68,650,90],{"class":82},[68,652,234],{"class":233},[68,654,599],{"class":237},[68,656,241],{"class":233},[68,658,101],{"class":82},[14,660,661],{},"If you actually need string behavior, use a string:",[59,663,665],{"className":61,"code":664,"language":63,"meta":64,"style":64},"text = \"apple,banana,orange\"\nparts = text.split(\",\")\nprint(parts)\n",[17,666,667,682,706],{"__ignoreMap":64},[68,668,669,672,674,676,679],{"class":70,"line":71},[68,670,671],{"class":74},"text ",[68,673,79],{"class":78},[68,675,357],{"class":233},[68,677,678],{"class":237},"apple,banana,orange",[68,680,681],{"class":233},"\"\n",[68,683,684,687,689,692,694,696,698,700,702,704],{"class":70,"line":104},[68,685,686],{"class":74},"parts ",[68,688,79],{"class":78},[68,690,691],{"class":74}," text",[68,693,177],{"class":82},[68,695,252],{"class":127},[68,697,118],{"class":82},[68,699,348],{"class":233},[68,701,90],{"class":237},[68,703,348],{"class":233},[68,705,604],{"class":82},[68,707,708,710,712,715],{"class":70,"line":111},[68,709,115],{"class":114},[68,711,118],{"class":82},[68,713,714],{"class":127},"parts",[68,716,604],{"class":82},[14,718,399],{},[59,720,722],{"className":61,"code":721,"language":63,"meta":64,"style":64},"['apple', 'banana', 'orange']\n",[17,723,724],{"__ignoreMap":64},[68,725,726,728,730,732,734,736,738,740,742,744,746,748,750],{"class":70,"line":71},[68,727,626],{"class":82},[68,729,241],{"class":233},[68,731,482],{"class":237},[68,733,241],{"class":233},[68,735,90],{"class":82},[68,737,234],{"class":233},[68,739,491],{"class":237},[68,741,241],{"class":233},[68,743,90],{"class":82},[68,745,234],{"class":233},[68,747,500],{"class":237},[68,749,241],{"class":233},[68,751,101],{"class":82},[14,753,754],{},"The key idea is simple:",[25,756,757,760],{},[28,758,759],{},"If the value is a string, use string methods",[28,761,762],{},"If the value is a list, use list methods",[14,764,765,766,773],{},"You can also use ",[173,767,769,772],{"href":768},"\u002Freference\u002Fpython-type-function-explained\u002F",[17,770,771],{},"type()"," in Python"," to confirm what kind of object you have.",[51,775,777],{"id":776},"fix-2-check-for-spelling-mistakes","Fix 2: Check for spelling mistakes",[14,779,780],{},"Attribute names are case-sensitive.",[14,782,783],{},"For example, this is wrong:",[59,785,787],{"className":61,"code":786,"language":63,"meta":64,"style":64},"text = \"hello\"\nprint(text.Upper())\n",[17,788,789,802],{"__ignoreMap":64},[68,790,791,793,795,797,800],{"class":70,"line":71},[68,792,671],{"class":74},[68,794,79],{"class":78},[68,796,357],{"class":233},[68,798,799],{"class":237},"hello",[68,801,681],{"class":233},[68,803,804,806,808,811,813,816],{"class":70,"line":104},[68,805,115],{"class":114},[68,807,118],{"class":82},[68,809,810],{"class":127},"text",[68,812,177],{"class":82},[68,814,815],{"class":127},"Upper",[68,817,818],{"class":82},"())\n",[14,820,399],{},[59,822,824],{"className":61,"code":823,"language":63,"meta":64,"style":64},"AttributeError: 'str' object has no attribute 'Upper'\n",[17,825,826],{"__ignoreMap":64},[68,827,828,830,832,834,837,839,841,843,845,847],{"class":70,"line":71},[68,829,19],{"class":121},[68,831,230],{"class":82},[68,833,234],{"class":233},[68,835,836],{"class":237},"str",[68,838,241],{"class":233},[68,840,244],{"class":121},[68,842,247],{"class":74},[68,844,241],{"class":233},[68,846,815],{"class":237},[68,848,255],{"class":233},[14,850,851,852,230],{},"The correct method name is ",[17,853,854],{},".upper()",[59,856,858],{"className":61,"code":857,"language":63,"meta":64,"style":64},"text = \"hello\"\nprint(text.upper())\n",[17,859,860,872],{"__ignoreMap":64},[68,861,862,864,866,868,870],{"class":70,"line":71},[68,863,671],{"class":74},[68,865,79],{"class":78},[68,867,357],{"class":233},[68,869,799],{"class":237},[68,871,681],{"class":233},[68,873,874,876,878,880,882,885],{"class":70,"line":104},[68,875,115],{"class":114},[68,877,118],{"class":82},[68,879,810],{"class":127},[68,881,177],{"class":82},[68,883,884],{"class":127},"upper",[68,886,818],{"class":82},[14,888,399],{},[59,890,892],{"className":61,"code":891,"language":63,"meta":64,"style":64},"HELLO\n",[17,893,894],{"__ignoreMap":64},[68,895,896],{"class":70,"line":71},[68,897,891],{"class":898},"s_hVV",[14,900,901],{},"Small typos often cause this error.",[14,903,904,905,230],{},"To inspect what names an object supports, use ",[173,906,908],{"href":907},"\u002Freference\u002Fpython-dir-function-explained\u002F",[17,909,910],{},"dir()",[59,912,914],{"className":61,"code":913,"language":63,"meta":64,"style":64},"text = \"hello\"\nprint(\"upper\" in dir(text))\nprint(\"Upper\" in dir(text))\n",[17,915,916,928,953],{"__ignoreMap":64},[68,917,918,920,922,924,926],{"class":70,"line":71},[68,919,671],{"class":74},[68,921,79],{"class":78},[68,923,357],{"class":233},[68,925,799],{"class":237},[68,927,681],{"class":233},[68,929,930,932,934,936,938,940,944,947,949,951],{"class":70,"line":104},[68,931,115],{"class":114},[68,933,118],{"class":82},[68,935,348],{"class":233},[68,937,884],{"class":237},[68,939,348],{"class":233},[68,941,943],{"class":942},"sVHd0"," in",[68,945,946],{"class":114}," dir",[68,948,118],{"class":82},[68,950,810],{"class":127},[68,952,131],{"class":82},[68,954,955,957,959,961,963,965,967,969,971,973],{"class":70,"line":111},[68,956,115],{"class":114},[68,958,118],{"class":82},[68,960,348],{"class":233},[68,962,815],{"class":237},[68,964,348],{"class":233},[68,966,943],{"class":942},[68,968,946],{"class":114},[68,970,118],{"class":82},[68,972,810],{"class":127},[68,974,131],{"class":82},[14,976,399],{},[59,978,980],{"className":61,"code":979,"language":63,"meta":64,"style":64},"True\nFalse\n",[17,981,982,988],{"__ignoreMap":64},[68,983,984],{"class":70,"line":71},[68,985,987],{"class":986},"s39Yj","True\n",[68,989,990],{"class":70,"line":104},[68,991,992],{"class":986},"False\n",[51,994,996],{"id":995},"fix-3-watch-for-none-values","Fix 3: Watch for None values",[14,998,999],{},"A very common version of this error is:",[59,1001,1003],{"className":61,"code":1002,"language":63,"meta":64,"style":64},"AttributeError: 'NoneType' object has no attribute 'something'\n",[17,1004,1005],{"__ignoreMap":64},[68,1006,1007,1009,1011,1013,1016,1018,1020,1022,1024,1027],{"class":70,"line":71},[68,1008,19],{"class":121},[68,1010,230],{"class":82},[68,1012,234],{"class":233},[68,1014,1015],{"class":237},"NoneType",[68,1017,241],{"class":233},[68,1019,244],{"class":121},[68,1021,247],{"class":74},[68,1023,241],{"class":233},[68,1025,1026],{"class":237},"something",[68,1028,255],{"class":233},[14,1030,1031,1032,177],{},"This means your variable is ",[17,1033,39],{},[14,1035,1036],{},"Example:",[59,1038,1040],{"className":61,"code":1039,"language":63,"meta":64,"style":64},"def get_name():\n    print(\"Running function\")\n    # No return statement\n\nname = get_name()\nprint(name.upper())\n",[17,1041,1042,1054,1070,1075,1079,1091],{"__ignoreMap":64},[68,1043,1044,1047,1051],{"class":70,"line":71},[68,1045,1046],{"class":533},"def",[68,1048,1050],{"class":1049},"sGLFI"," get_name",[68,1052,1053],{"class":82},"():\n",[68,1055,1056,1059,1061,1063,1066,1068],{"class":70,"line":104},[68,1057,1058],{"class":114},"    print",[68,1060,118],{"class":82},[68,1062,348],{"class":233},[68,1064,1065],{"class":237},"Running function",[68,1067,348],{"class":233},[68,1069,604],{"class":82},[68,1071,1072],{"class":70,"line":111},[68,1073,1074],{"class":158},"    # No return statement\n",[68,1076,1077],{"class":70,"line":134},[68,1078,108],{"emptyLinePlaceholder":107},[68,1080,1081,1084,1086,1088],{"class":70,"line":150},[68,1082,1083],{"class":74},"name ",[68,1085,79],{"class":78},[68,1087,1050],{"class":127},[68,1089,1090],{"class":82},"()\n",[68,1092,1093,1095,1097,1100,1102,1104],{"class":70,"line":155},[68,1094,115],{"class":114},[68,1096,118],{"class":82},[68,1098,1099],{"class":127},"name",[68,1101,177],{"class":82},[68,1103,884],{"class":127},[68,1105,818],{"class":82},[14,1107,399],{},[59,1109,1111],{"className":61,"code":1110,"language":63,"meta":64,"style":64},"Running function\nTraceback (most recent call last):\n  ...\nAttributeError: 'NoneType' object has no attribute 'upper'\n",[17,1112,1113,1118,1131,1136],{"__ignoreMap":64},[68,1114,1115],{"class":70,"line":71},[68,1116,1117],{"class":74},"Running function\n",[68,1119,1120,1123,1125,1128],{"class":70,"line":104},[68,1121,1122],{"class":127},"Traceback ",[68,1124,118],{"class":82},[68,1126,1127],{"class":127},"most recent call last",[68,1129,1130],{"class":82},"):\n",[68,1132,1133],{"class":70,"line":111},[68,1134,1135],{"class":898},"  ...\n",[68,1137,1138,1140,1142,1144,1146,1148,1150,1152,1154,1156],{"class":70,"line":134},[68,1139,19],{"class":121},[68,1141,230],{"class":82},[68,1143,234],{"class":233},[68,1145,1015],{"class":237},[68,1147,241],{"class":233},[68,1149,244],{"class":121},[68,1151,247],{"class":74},[68,1153,241],{"class":233},[68,1155,884],{"class":237},[68,1157,255],{"class":233},[14,1159,428],{},[25,1161,1162,1168,1177],{},[28,1163,1164,1167],{},[17,1165,1166],{},"get_name()"," does not return anything",[28,1169,1170,1171,1174,1175],{},"A function with no ",[17,1172,1173],{},"return"," gives ",[17,1176,39],{},[28,1178,1179,1181,1182,446],{},[17,1180,39],{}," does not have an ",[17,1183,854],{},[14,1185,1186],{},"One fix is to return a value:",[59,1188,1190],{"className":61,"code":1189,"language":63,"meta":64,"style":64},"def get_name():\n    return \"sam\"\n\nname = get_name()\nprint(name.upper())\n",[17,1191,1192,1200,1212,1216,1226],{"__ignoreMap":64},[68,1193,1194,1196,1198],{"class":70,"line":71},[68,1195,1046],{"class":533},[68,1197,1050],{"class":1049},[68,1199,1053],{"class":82},[68,1201,1202,1205,1207,1210],{"class":70,"line":104},[68,1203,1204],{"class":942},"    return",[68,1206,357],{"class":233},[68,1208,1209],{"class":237},"sam",[68,1211,681],{"class":233},[68,1213,1214],{"class":70,"line":111},[68,1215,108],{"emptyLinePlaceholder":107},[68,1217,1218,1220,1222,1224],{"class":70,"line":134},[68,1219,1083],{"class":74},[68,1221,79],{"class":78},[68,1223,1050],{"class":127},[68,1225,1090],{"class":82},[68,1227,1228,1230,1232,1234,1236,1238],{"class":70,"line":150},[68,1229,115],{"class":114},[68,1231,118],{"class":82},[68,1233,1099],{"class":127},[68,1235,177],{"class":82},[68,1237,884],{"class":127},[68,1239,818],{"class":82},[14,1241,399],{},[59,1243,1245],{"className":61,"code":1244,"language":63,"meta":64,"style":64},"SAM\n",[17,1246,1247],{"__ignoreMap":64},[68,1248,1249],{"class":70,"line":71},[68,1250,1244],{"class":898},[14,1252,1253],{},"Another fix is to check before using the value:",[59,1255,1257],{"className":61,"code":1256,"language":63,"meta":64,"style":64},"name = None\n\nif name is not None:\n    print(name.upper())\nelse:\n    print(\"name is None\")\n",[17,1258,1259,1268,1272,1292,1306,1313],{"__ignoreMap":64},[68,1260,1261,1263,1265],{"class":70,"line":71},[68,1262,1083],{"class":74},[68,1264,79],{"class":78},[68,1266,1267],{"class":986}," None\n",[68,1269,1270],{"class":70,"line":104},[68,1271,108],{"emptyLinePlaceholder":107},[68,1273,1274,1277,1280,1283,1286,1289],{"class":70,"line":111},[68,1275,1276],{"class":942},"if",[68,1278,1279],{"class":74}," name ",[68,1281,1282],{"class":78},"is",[68,1284,1285],{"class":78}," not",[68,1287,1288],{"class":986}," None",[68,1290,1291],{"class":82},":\n",[68,1293,1294,1296,1298,1300,1302,1304],{"class":70,"line":134},[68,1295,1058],{"class":114},[68,1297,118],{"class":82},[68,1299,1099],{"class":127},[68,1301,177],{"class":82},[68,1303,884],{"class":127},[68,1305,818],{"class":82},[68,1307,1308,1311],{"class":70,"line":150},[68,1309,1310],{"class":942},"else",[68,1312,1291],{"class":82},[68,1314,1315,1317,1319,1321,1324,1326],{"class":70,"line":155},[68,1316,1058],{"class":114},[68,1318,118],{"class":82},[68,1320,348],{"class":233},[68,1322,1323],{"class":237},"name is None",[68,1325,348],{"class":233},[68,1327,604],{"class":82},[14,1329,1330,1331,177],{},"If this is your exact problem, see ",[173,1332,453,1334,457],{"href":1333},"\u002Ferrors\u002Fattributeerror-nonetype-object-has-no-attribute-fix\u002F",[17,1335,1336],{},"'NoneType' object has no attribute",[51,1338,1340],{"id":1339},"fix-4-trace-where-the-variable-changed","Fix 4: Trace where the variable changed",[14,1342,1343],{},"Sometimes a variable starts as one type and later becomes another type.",[14,1345,1036],{},[59,1347,1349],{"className":61,"code":1348,"language":63,"meta":64,"style":64},"value = \"1,2,3\"\nprint(type(value))\n\nvalue = [1, 2, 3]\nprint(type(value))\n\nprint(value.split(\",\"))\n",[17,1350,1351,1364,1378,1382,1402,1416,1420],{"__ignoreMap":64},[68,1352,1353,1355,1357,1359,1362],{"class":70,"line":71},[68,1354,75],{"class":74},[68,1356,79],{"class":78},[68,1358,357],{"class":233},[68,1360,1361],{"class":237},"1,2,3",[68,1363,681],{"class":233},[68,1365,1366,1368,1370,1372,1374,1376],{"class":70,"line":104},[68,1367,115],{"class":114},[68,1369,118],{"class":82},[68,1371,122],{"class":121},[68,1373,118],{"class":82},[68,1375,128],{"class":127},[68,1377,131],{"class":82},[68,1379,1380],{"class":70,"line":111},[68,1381,108],{"emptyLinePlaceholder":107},[68,1383,1384,1386,1388,1390,1392,1394,1396,1398,1400],{"class":70,"line":134},[68,1385,75],{"class":74},[68,1387,79],{"class":78},[68,1389,83],{"class":82},[68,1391,87],{"class":86},[68,1393,90],{"class":82},[68,1395,93],{"class":86},[68,1397,90],{"class":82},[68,1399,98],{"class":86},[68,1401,101],{"class":82},[68,1403,1404,1406,1408,1410,1412,1414],{"class":70,"line":150},[68,1405,115],{"class":114},[68,1407,118],{"class":82},[68,1409,122],{"class":121},[68,1411,118],{"class":82},[68,1413,128],{"class":127},[68,1415,131],{"class":82},[68,1417,1418],{"class":70,"line":155},[68,1419,108],{"emptyLinePlaceholder":107},[68,1421,1423,1425,1427,1429,1431,1433,1435,1437,1439,1441],{"class":70,"line":1422},7,[68,1424,115],{"class":114},[68,1426,118],{"class":82},[68,1428,128],{"class":127},[68,1430,177],{"class":82},[68,1432,252],{"class":127},[68,1434,118],{"class":82},[68,1436,348],{"class":233},[68,1438,90],{"class":237},[68,1440,348],{"class":233},[68,1442,131],{"class":82},[14,1444,399],{},[59,1446,1448],{"className":61,"code":1447,"language":63,"meta":64,"style":64},"\u003Cclass 'str'>\n\u003Cclass 'list'>\nTraceback (most recent call last):\n  ...\nAttributeError: 'list' object has no attribute 'split'\n",[17,1449,1450,1464,1478,1488,1492],{"__ignoreMap":64},[68,1451,1452,1454,1456,1458,1460,1462],{"class":70,"line":71},[68,1453,530],{"class":78},[68,1455,534],{"class":533},[68,1457,234],{"class":233},[68,1459,836],{"class":237},[68,1461,241],{"class":233},[68,1463,543],{"class":78},[68,1465,1466,1468,1470,1472,1474,1476],{"class":70,"line":104},[68,1467,530],{"class":78},[68,1469,534],{"class":533},[68,1471,234],{"class":233},[68,1473,238],{"class":237},[68,1475,241],{"class":233},[68,1477,543],{"class":78},[68,1479,1480,1482,1484,1486],{"class":70,"line":111},[68,1481,1122],{"class":127},[68,1483,118],{"class":82},[68,1485,1127],{"class":127},[68,1487,1130],{"class":82},[68,1489,1490],{"class":70,"line":134},[68,1491,1135],{"class":898},[68,1493,1494,1496,1498,1500,1502,1504,1506,1508,1510,1512],{"class":70,"line":150},[68,1495,19],{"class":121},[68,1497,230],{"class":82},[68,1499,234],{"class":233},[68,1501,238],{"class":237},[68,1503,241],{"class":233},[68,1505,244],{"class":121},[68,1507,247],{"class":74},[68,1509,241],{"class":233},[68,1511,252],{"class":237},[68,1513,255],{"class":233},[14,1515,1516,1517,1519],{},"The problem is not only the last line. The real problem is that ",[17,1518,128],{}," changed from a string to a list.",[14,1521,1522],{},"To debug this:",[25,1524,1525,1528,1534,1537],{},[28,1526,1527],{},"Print the value before the failing line",[28,1529,1530,1531],{},"Print ",[17,1532,1533],{},"type(value)",[28,1535,1536],{},"Look for earlier reassignment",[28,1538,1539],{},"Use clearer variable names",[14,1541,1542],{},"For example, this is easier to understand:",[59,1544,1546],{"className":61,"code":1545,"language":63,"meta":64,"style":64},"text = \"1,2,3\"\nnumbers = [1, 2, 3]\n\nprint(text.split(\",\"))\nprint(numbers)\n",[17,1547,1548,1560,1581,1585,1607],{"__ignoreMap":64},[68,1549,1550,1552,1554,1556,1558],{"class":70,"line":71},[68,1551,671],{"class":74},[68,1553,79],{"class":78},[68,1555,357],{"class":233},[68,1557,1361],{"class":237},[68,1559,681],{"class":233},[68,1561,1562,1565,1567,1569,1571,1573,1575,1577,1579],{"class":70,"line":104},[68,1563,1564],{"class":74},"numbers ",[68,1566,79],{"class":78},[68,1568,83],{"class":82},[68,1570,87],{"class":86},[68,1572,90],{"class":82},[68,1574,93],{"class":86},[68,1576,90],{"class":82},[68,1578,98],{"class":86},[68,1580,101],{"class":82},[68,1582,1583],{"class":70,"line":111},[68,1584,108],{"emptyLinePlaceholder":107},[68,1586,1587,1589,1591,1593,1595,1597,1599,1601,1603,1605],{"class":70,"line":134},[68,1588,115],{"class":114},[68,1590,118],{"class":82},[68,1592,810],{"class":127},[68,1594,177],{"class":82},[68,1596,252],{"class":127},[68,1598,118],{"class":82},[68,1600,348],{"class":233},[68,1602,90],{"class":237},[68,1604,348],{"class":233},[68,1606,131],{"class":82},[68,1608,1609,1611,1613,1616],{"class":70,"line":150},[68,1610,115],{"class":114},[68,1612,118],{"class":82},[68,1614,1615],{"class":127},"numbers",[68,1617,604],{"class":82},[14,1619,765,1620,1626],{},[173,1621,1623,772],{"href":1622},"\u002Freference\u002Fpython-isinstance-function-explained\u002F",[17,1624,1625],{},"isinstance()"," when you need to check types during debugging.",[51,1628,1630],{"id":1629},"how-to-debug-attributeerror-step-by-step","How to debug AttributeError step by step",[14,1632,1633,1634,1636],{},"When you see ",[17,1635,19],{},", follow this process:",[1638,1639,1640,1643,1646,1649,1655,1662],"ol",{},[28,1641,1642],{},"Read the full error message carefully",[28,1644,1645],{},"Identify the object type named in the message",[28,1647,1648],{},"Identify the missing attribute name",[28,1650,1651,1652],{},"Print the variable and ",[17,1653,1654],{},"type(variable)",[28,1656,1657,1658,1661],{},"Use ",[17,1659,1660],{},"dir(variable)"," to see available attributes",[28,1663,1664],{},"Check the documentation or your class definition if needed",[14,1666,1667],{},"Useful debugging commands:",[59,1669,1671],{"className":61,"code":1670,"language":63,"meta":64,"style":64},"print(value)\nprint(type(value))\nprint(dir(value))\nprint(hasattr(value, \"attribute_name\"))\n",[17,1672,1673,1683,1697,1711],{"__ignoreMap":64},[68,1674,1675,1677,1679,1681],{"class":70,"line":71},[68,1676,115],{"class":114},[68,1678,118],{"class":82},[68,1680,128],{"class":127},[68,1682,604],{"class":82},[68,1684,1685,1687,1689,1691,1693,1695],{"class":70,"line":104},[68,1686,115],{"class":114},[68,1688,118],{"class":82},[68,1690,122],{"class":121},[68,1692,118],{"class":82},[68,1694,128],{"class":127},[68,1696,131],{"class":82},[68,1698,1699,1701,1703,1705,1707,1709],{"class":70,"line":111},[68,1700,115],{"class":114},[68,1702,118],{"class":82},[68,1704,141],{"class":114},[68,1706,118],{"class":82},[68,1708,128],{"class":127},[68,1710,131],{"class":82},[68,1712,1713,1715,1717,1720,1722,1724,1726,1728,1731,1733],{"class":70,"line":134},[68,1714,115],{"class":114},[68,1716,118],{"class":82},[68,1718,1719],{"class":114},"hasattr",[68,1721,118],{"class":82},[68,1723,128],{"class":127},[68,1725,90],{"class":82},[68,1727,357],{"class":233},[68,1729,1730],{"class":237},"attribute_name",[68,1732,348],{"class":233},[68,1734,131],{"class":82},[14,1736,1036],{},[59,1738,1740],{"className":61,"code":1739,"language":63,"meta":64,"style":64},"value = 100\n\nprint(value)\nprint(type(value))\nprint(hasattr(value, \"append\"))\nprint(dir(value))\n",[17,1741,1742,1751,1755,1765,1779,1801],{"__ignoreMap":64},[68,1743,1744,1746,1748],{"class":70,"line":71},[68,1745,75],{"class":74},[68,1747,79],{"class":78},[68,1749,1750],{"class":86}," 100\n",[68,1752,1753],{"class":70,"line":104},[68,1754,108],{"emptyLinePlaceholder":107},[68,1756,1757,1759,1761,1763],{"class":70,"line":111},[68,1758,115],{"class":114},[68,1760,118],{"class":82},[68,1762,128],{"class":127},[68,1764,604],{"class":82},[68,1766,1767,1769,1771,1773,1775,1777],{"class":70,"line":134},[68,1768,115],{"class":114},[68,1770,118],{"class":82},[68,1772,122],{"class":121},[68,1774,118],{"class":82},[68,1776,128],{"class":127},[68,1778,131],{"class":82},[68,1780,1781,1783,1785,1787,1789,1791,1793,1795,1797,1799],{"class":70,"line":150},[68,1782,115],{"class":114},[68,1784,118],{"class":82},[68,1786,1719],{"class":114},[68,1788,118],{"class":82},[68,1790,128],{"class":127},[68,1792,90],{"class":82},[68,1794,357],{"class":233},[68,1796,592],{"class":237},[68,1798,348],{"class":233},[68,1800,131],{"class":82},[68,1802,1803,1805,1807,1809,1811,1813],{"class":70,"line":155},[68,1804,115],{"class":114},[68,1806,118],{"class":82},[68,1808,141],{"class":114},[68,1810,118],{"class":82},[68,1812,128],{"class":127},[68,1814,131],{"class":82},[14,1816,1817],{},"This helps you answer questions like:",[25,1819,1820,1826,1829],{},[28,1821,1822,1823,1825],{},"Is ",[17,1824,128],{}," really the type I expected?",[28,1827,1828],{},"Does this object actually have the method I want?",[28,1830,1831],{},"Did I misspell the attribute?",[14,1833,1834,1835,177],{},"If you want a broader overview, read ",[173,1836,1838],{"href":1837},"\u002Flearn\u002Fpython-errors-and-exceptions-explained\u002F","Python errors and exceptions explained",[51,1840,1842],{"id":1841},"common-attributeerror-examples","Common AttributeError examples",[14,1844,1845],{},"Here are some common forms of this error:",[25,1847,1848,1853,1858,1863,1868],{},[28,1849,1850],{},[17,1851,1852],{},"'list' object has no attribute ...",[28,1854,1855],{},[17,1856,1857],{},"'str' object has no attribute ...",[28,1859,1860],{},[17,1861,1862],{},"'NoneType' object has no attribute ...",[28,1864,1865],{},[17,1866,1867],{},"'int' object has no attribute ...",[28,1869,1870],{},[17,1871,1872],{},"module has no attribute ...",[14,1874,1875],{},"Examples:",[25,1877,1878,1881,1884,1887],{},[28,1879,1880],{},"A list used like a string",[28,1882,1883],{},"A string used like a list",[28,1885,1886],{},"An integer used like an object with string or list methods",[28,1888,1889],{},"A module name used with an attribute that does not exist",[14,1891,1892],{},"For object-specific help, see:",[25,1894,1895,1904,1912],{},[28,1896,1897],{},[173,1898,1900,1901,457],{"href":1899},"\u002Ferrors\u002Fattributeerror-str-object-has-no-attribute-fix\u002F","Fix ",[17,1902,1903],{},"'str' object has no attribute",[28,1905,1906],{},[173,1907,1900,1909,457],{"href":1908},"\u002Ferrors\u002Fattributeerror-int-object-has-no-attribute-fix\u002F",[17,1910,1911],{},"'int' object has no attribute",[28,1913,1914],{},[173,1915,1900,1917,457],{"href":1916},"\u002Ferrors\u002Fattributeerror-module-has-no-attribute-fix\u002F",[17,1918,1919],{},"module has no attribute",[51,1921,1923],{"id":1922},"how-to-prevent-attributeerror","How to prevent AttributeError",[14,1925,1926,1927,1929],{},"You can prevent many ",[17,1928,19],{}," problems with a few habits:",[25,1931,1932,1935,1938,1941,1949],{},[28,1933,1934],{},"Learn the basic methods for strings, lists, dictionaries, and sets",[28,1936,1937],{},"Check return values from functions",[28,1939,1940],{},"Avoid reusing one variable name for different types",[28,1942,1657,1943,1945,1946,1948],{},[17,1944,771],{}," and ",[17,1947,1625],{}," when debugging",[28,1950,1951],{},"Write small tests for important functions",[14,1953,1954],{},"Good habits make a big difference:",[25,1956,1957,1960,1963,1966],{},[28,1958,1959],{},"Use clear variable names",[28,1961,1962],{},"Print values when something looks wrong",[28,1964,1965],{},"Read the error message fully",[28,1967,1968],{},"Check method names carefully",[51,1970,1972],{"id":1971},"faq","FAQ",[1974,1975,1977],"h3",{"id":1976},"what-is-an-attribute-in-python","What is an attribute in Python?",[14,1979,1980,1981,1983,1984,177],{},"An attribute is a name attached to an object. It can be a stored value like ",[17,1982,198],{}," or a method like ",[17,1985,1986],{},"text.lower()",[1974,1988,1990],{"id":1989},"what-is-the-difference-between-attributeerror-and-nameerror","What is the difference between AttributeError and NameError?",[14,1992,1993,1996,1997,1999],{},[17,1994,1995],{},"NameError"," means a variable name does not exist. ",[17,1998,19],{}," means the object exists, but the attribute or method does not.",[1974,2001,2003],{"id":2002},"why-do-i-get-nonetype-object-has-no-attribute","Why do I get 'NoneType' object has no attribute?",[14,2005,36,2006,2008,2009,2011],{},[17,2007,39],{},", and ",[17,2010,39],{}," does not have the attribute you tried to use. This often happens when a function returns nothing.",[1974,2013,2015],{"id":2014},"how-do-i-see-what-attributes-an-object-has","How do I see what attributes an object has?",[14,2017,1657,2018,2021,2022,177],{},[17,2019,2020],{},"dir(object)"," to list available attributes and methods. For a quick type check, use ",[17,2023,2024],{},"type(object)",[51,2026,2028],{"id":2027},"see-also","See also",[25,2030,2031,2037,2043,2049,2057,2063,2069],{},[28,2032,2033],{},[173,2034,1900,2035,457],{"href":452},[17,2036,456],{},[28,2038,2039],{},[173,2040,1900,2041,457],{"href":1899},[17,2042,1903],{},[28,2044,2045],{},[173,2046,1900,2047,457],{"href":1333},[17,2048,1336],{},[28,2050,2051],{},[173,2052,2053,2054,2056],{"href":768},"Python ",[17,2055,771],{}," function explained",[28,2058,2059],{},[173,2060,2053,2061,2056],{"href":907},[17,2062,910],{},[28,2064,2065],{},[173,2066,2053,2067,2056],{"href":1622},[17,2068,1625],{},[28,2070,2071],{},[173,2072,2073],{"href":175},"How to debug Python code",[2075,2076,2077],"style",{},"html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sptTA, html code.shiki .sptTA{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZMiF, html code.shiki .sZMiF{--shiki-light:#E2931D;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .slqww, html code.shiki .slqww{--shiki-light:#6182B8;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sbsja, html code.shiki .sbsja{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .s39Yj, html code.shiki .s39Yj{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sGLFI, html code.shiki .sGLFI{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":64,"searchDepth":104,"depth":104,"links":2079},[2080,2081,2082,2083,2084,2085,2086,2087,2088,2089,2090,2091,2097],{"id":53,"depth":104,"text":54},{"id":180,"depth":104,"text":181},{"id":273,"depth":104,"text":274},{"id":327,"depth":104,"text":328},{"id":460,"depth":104,"text":461},{"id":776,"depth":104,"text":777},{"id":995,"depth":104,"text":996},{"id":1339,"depth":104,"text":1340},{"id":1629,"depth":104,"text":1630},{"id":1841,"depth":104,"text":1842},{"id":1922,"depth":104,"text":1923},{"id":1971,"depth":104,"text":1972,"children":2092},[2093,2094,2095,2096],{"id":1976,"depth":111,"text":1977},{"id":1989,"depth":111,"text":1990},{"id":2002,"depth":111,"text":2003},{"id":2014,"depth":111,"text":2015},{"id":2027,"depth":104,"text":2028},"Master attributeerror in python causes and fixes in our comprehensive Python beginner guide.","md",{},"\u002Ferrors\u002Fattributeerror-in-python-causes-and-fixes",{"title":5,"description":2098},"errors\u002Fattributeerror-in-python-causes-and-fixes","aLjSZXXVAn3op9drl4nLOFL7dvezSm3KH_mwwU1Sqik",1777585478205]