【问题标题】:How to get more info on julia array bounds error?如何获取有关 julia 数组边界错误的更多信息?
【发布时间】:2015-04-28 04:05:39
【问题描述】:

我编写了一个带有数组边界错误的 Julia 函数:

function wrong()

   alphas = [ 0.5, 1, 1.25, 2.0 ] ;
   theta = 0:0.02:1 * pi ;
   U = zeros( length(theta), 4 ) ;

   i = 1 ;
   j = 1 ;
   for a = alphas
      kd = pi * a ;

      for t = theta
         v = (cos( kd * cos( t ) ) - cos( kd ))/sin( t ) ;

         U[i, j] = v ;

         i = i + 1 ;
      end

      j = j + 1 ;
   end
end

这里 i=1 应该在循环中。我明白了:

julia> wrong()
ERROR: BoundsError()
 in setindex! at array.jl:308 (repeats 2 times)

有什么方法可以让 julia 解释器在遇到异常时提供有关异常的更详细信息,或者有什么方法可以调试失败的语句并查看发生了什么?例如,知道发生这种情况时导致边界错误的索引值将有助于调试。

【问题讨论】:

  • 无关的、肤浅的、挑剔的文体细节:在 Julia 中,以+= 递增并避免以分号结束语句被认为是更好的风格。
  • += 我可以,但是分号将是一个很难改掉的习惯,因为我主要使用 C++ 编写代码。

标签: julia


【解决方案1】:

通过此拉取请求 https://github.com/JuliaLang/julia/pull/9534 在 julia v0.4 中改进了边界错误报告。在 julia 0.4 中,默认情况下会打印数组以及您尝试访问的索引:

julia> wrong()
ERROR: BoundsError: attempt to access 158x4 Array{Float64,2}:
 NaN           0.0  0.0  0.0
   0.0157085   0.0  0.0  0.0
   0.0314201   0.0  0.0  0.0
   0.047138    0.0  0.0  0.0
   0.0628651   0.0  0.0  0.0
   0.0786045   0.0  0.0  0.0
   0.094359    0.0  0.0  0.0
   0.110131    0.0  0.0  0.0
   0.125924    0.0  0.0  0.0
   0.141739    0.0  0.0  0.0
   ⋮
   0.127183    0.0  0.0  0.0
   0.111388    0.0  0.0  0.0
   0.0956143   0.0  0.0  0.0
   0.0798585   0.0  0.0  0.0
   0.064118   0.0  0.0  0.0
   0.04839     0.0  0.0  0.0
   0.0326715   0.0  0.0  0.0
   0.0169595   0.0  0.0  0.0
   0.00125087  0.0  0.0  0.0
  at index [159,2]
 in wrong at none:15

我不知道您是否可以将更改反向移植到您的 julia 版本,但切换到 0.4 应该可以解决您的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    • 2020-04-24
    • 2015-12-09
    • 1970-01-01
    相关资源
    最近更新 更多